实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8"> <?php header("content-type=text/html;charset=utf-8"); /** * 对象的声明与实例化 * 类的声明class * 对象实例化new * 对象的访问-> */ //创建一个类,利用class来声明一个类 class hello { } //使用new来实例化一个类,并将其附给变量$hello $hello = new hello(); //给对象增加一些属性和方法 $hello->name = '杨过'; $hello->age = 30; $hello->hello1 = function () { return '我是一个方法'; }; //访问对象的属性或方法 echo $hello->name; echo $hello->age; echo call_user_func($hello->hello1);//因为hello1是一个函数了,所以要使用回调来处理一下就是call_user_func()来处理
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8"> <?php /** * 对象的三大特性:封装、继承、多态 * 封装就是将里面的数据进行私有化或者限制访问 * 封装用到的三种方法:public公共的共享,private私有的,protected限制访问的 * 为什么要封装呢?因为将封装起来的对象,使用公共的接口来访问,这样可以提供安全性。进行保护 * 类中成员,可以直接使用$this来访问成员,可直接访问 */ //声明一个类 class demo2 { //给对象两个公共属性 public $name = 'php中文网'; public $email = 'php@php.cn'; // 再给两个不是公共的属性 protected $sex = 1;//限制属性,公可以在本类或者子类中访问 protected $style;//限制的属性,仅可以在本类或者子类中可以访问 private $age;//私有属性,只可以在本类中访问 //声明类方法,创建公共接口 public function abc() { return ($this->sex == 0) ? '男性' : '女性';//将受限制属性进行公共接口来访问 } public function cbd() { return ($this->sex ==0) ? $this->getsex() : '保密';//判断将私有属性也进行公共接口来访问 } } $demo2 = new demo2(); echo $demo2->name; echo $demo2->email; echo $demo2->abc();//因为公共接口是一个函数,所以要不能像前面直接访问属性哪种方法来访问。这个访问的是一个方法,不是一个属性。 echo $demo2->cbd();
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8"> <?php /** * 类常量、对象初始化、属性的重载 * 类常量,可以用来创建对象之间的共享数据 * 对象初始化,用构造方法来实现,让对象在完成一些工作的时候,进行初始化一些值或者属性 * 例如:对象初始化时,会自动调用对象的一些方法。对象初始化用__construct() * 属性的重载:访问限制或者私有的属性或者不存在的属性,会触发这个属性重载 * 属性的重载有四种方法:__get(),__set(),__isset(),__unset(),这四种方法 */ class demo3 { //类常量,所有对象共享,用类名加范围解析符::来访问,且默认也是公共属性 //类常量,主要是用来创建类之间的共享数据 const SIZE_NAME = 'PHP中文网'; //声明三个私有属性 private $name; private $email; private $age; //利用构造方法来初始化 public function __construct($name,$email,$age) { $this->name = $name; $this->email = $email; $this->age = $age; } public function show() { return '网站名称:'.$this->name.' 公共邮箱是:'.$this->email.' 今年已经:'.$this->age; } public function __get($name) { if ($name == 'age') { return $name.'不允许查看'; } return $this->$name; } public function __set($name, $value) { if ($name == 'email') { return $name.'不允许修改'; } $this->$name = $value; } public function __isset($name) { if ($name == 'age') { return false;//因为是检测,所以这里要设置,true和false } return isset($this->$name); } public function __unset($name) { if ($name == 'name' || $name = 'email') { return false; } unset ($this->$name); } } //输出类常量利用::来输出 echo demo3::SIZE_NAME; //输出构造方法 $demo3 = new demo3('php中文网','php@php.cn',30); echo '<hr>'; //利用__get()来获取值 echo $demo3->age; echo $demo3->name; echo $demo3->email; //echo $demo3->show(); //利用__set()来更新里面的值 $demo3->name = 'PHP'; echo $demo3->name; $demo3->email = 'zl@php.cn'; echo $demo3->email; //利用__isset()来做属性检测重载 echo isset($demo3->name) ? '末检查到' : '检查到'; echo isset($demo3->age) ? '末检查到' : '检查到'; //利用__unset来销毁一个属性 unset ($demo3->age); echo $demo3->age; //因为利用__unset设置了不能销毁,所以这个属性不能销毁,而上面的没有设置销毁,就可以将上面的属性销毁。 unset($demo3->name); echo $demo3->name;
运行实例 »
点击 "运行实例" 按钮查看在线实例
实例
<meta http-equiv="content-type" content="text/html" charset="UTF-8"> <?php /** * 对象的继承与多态 * 继承主要是让代码可以重复的使用,这样可以提供效率 */ class demo4 { //父类的属性 public $name;//声明一个公共的属性 protected $email;//声明一个受限制的属性 private $age;//声明一个私有属性 const ADMIN_NAME = 'PHP中文网';//声明一个类常量 //父类构造器 public function __construct($name,$email) { $this->name = $name; $this->email =$email; } //属性的重载 public function __get($name) { if (isset($this->$name)) { return $this->$name; } return '非法属性'; } } //利用extends来继承父类 class demo4_1 extends demo4 { private $sex; const ADMIN_NAME = '教学管理系统'; public function __construct($name, $email,$sex = '男') { $this->name = $name; $this->email = $email; //引用父类的构造方法,来简写代码 //利用parent::来引用父类里面的初始化方法 parent::__construct($name,$email); $this->sex = $sex; } //因为工作中,最终要执行的方法,在子类里面做,所以父类的__get()是可以删除的,也不会影响代码的执行 //将父类里面的属性重载进行了重写,所以,可以顺利的读取到子类里面的东西 public function __get($name) { if (isset($this->$name)) { return $this->$name; } return '非法属性'; } } $demo4_1 = new demo4_1('peter','peter@php.cn'); echo $demo4_1->name; echo $demo4_1->email; echo $demo4_1::ADMIN_NAME;//访问父类里面的类常量 echo $demo4_1->sex;// echo $demo4_1->age;//因为age是私有属性,所以无法访问
运行实例 »
点击 "运行实例" 按钮查看在线实例