类的声明与实例化
实例
<?php /** *类的声明与实例化 */ class demo1//声明类 { public $name = 'zhangsan'; public function __construct() { echo 'Hello world.'; } $demo1 = new Demo1();//实例化类
运行实例 »
点击 "运行实例" 按钮查看在线实例
2.类常量与类属性的重载
实例
<?php /** *类常量与类属性的重载 */ class demo2//声明类 { const APP_NAME = 'PHP';//类常量 private $age = 28; private $name = 'lisi'; private $sex = 1; private $salary = 3800; //类属性的重载 public function __get($str) { if(isset($this->$str)) { return $this->$str; }else{ return '属性不存在'; } } public function __set($str,$value) { if($str == 'age') { return $str.'不允许修改'; }else{ $this->$str = $value; } } public function __isset($str) { if ($str == 'salary') { return false; } return isset($this->$str); } public function __unset($str) { if ($str == 'salary') { return '不能销毁'; } unset($this->$str); } } $demo2 = new Demo2();//实例化类 echo $demo2::APP_NAME,'<br>';//类常量的调用 //获取 echo $demo2->age,'<br>'; echo $demo2->height,'<br>','<hr>'; //设置 $demo2->age = 40 ; $demo2->salary = 4800; echo $demo2->age,'<br>'; echo $demo2->salary,'<br>','<hr>'; //检测 echo isset($demo2->salary) ? '存在' : '不存在' ,'<br>'; echo isset($demo2->name) ? '存在' : '不存在' ,'<br>','<hr>'; //销毁 unset($demo2->sex); echo $demo2->sex,'<br>'; unset($demo2->salary); echo $demo2->salary,'<br>','<hr>';
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.类的继承与方法重写
实例
<?php /** * 对象三要素之: 继承与多态 * 1. 继承是指类之间的继承,是代码复用的重要手段,之前我们是通过"函数"实现的代码复用 * 2. 继承使用关键字: extends * 3. 引用父类成员: parent:: * 4. 子类可以将父类中的公共和受保护成员全部继承 */ class Demo3 { //父类属性 const APP_NAME = 'PHP'; public $name; protected $age; private $salary; //父类构造器 public function __construct($name, $age) { $this->name = $name; $this->age = $age; } //属性访问重载 public function __get($name) { if (isset($this->$name)) { return $this->$name; } return '非法属性'; } } class Demo4 extends Demo3 { //子类自有属性 private $sex; const APP_NAME = 'HTML'; //类常量可以在子类中重写 //子类将父类同名方法进行重写,根据传入参数不同,实现不同的功能,这就是多态性 public function __construct($name, $age, $sex='male') { //引用父类的构造方法来简化代码 parent::__construct($name, $age); $this->sex = $sex; } //将父类属性重载方法重写后,顺利读取子类属性 //所以属性重载方法__get()应该设置在最终工作类中(例如本类Demo4),而不是父类Demo3中 //此时,将父类Demo3中的__get()删除,代码执行仍然正确 public function __get($name) { if (isset($this->$name)) { return $this->$name; } return '非法属性'; } } //当前类Demo4中即使没有任何成员,一样可以访问父类成员 $demo4 = new Demo4('zhangsan', 28); //访问父类中的属性 echo $demo4->name,'<br>'; echo $demo4->age,'<br>'; echo $demo4->salary,'<br>'; // 父类私有属性子类不可见,访问不到 echo Demo4::APP_NAME, '<br>'; // 访问类常量 echo $demo4->sex, '<br>'; //取不值,因为父类__get()不能识别子类属性
运行实例 »
点击 "运行实例" 按钮查看在线实例
4类中静态成员的声明与访问
实例
<?php /** * 类中的静态成员与访问 * 1.类中静态成员使用关键字:static 定义; * 2.静态成员包括: 静态属性和静态方法; * 3.静态成员是属于类的,我们应该终终使用类来访问; * 4.静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问; * 5.静态成员是可以有访问限制的: public,protected,private; * 6.静态成员与对象无关,所以内部不允许使用伪变量: $this; * 7.访问时,类名后必须使用:范围解析符:双冒号[::] * 8.在类中引用自身使用关键字: self:: * * 范围解析符的作用: * 1. 访问静态成员; * 2. 访问类常量; * 3. 继承上下文中引用被覆盖成员 */ class Demo5 { public static $name = '张三'; public static $age = 28; public static $salary = 3000; public static function getMassge() { return '姓名:'.self::$name.',年龄:'.self::$age.',工资:'.self::$salary; } } //访问静态成员:无需实例化 echo demo5::$name,'<br>'; echo demo5::getMassge();
运行实例 »
点击 "运行实例" 按钮查看在线实例