这一节课主要讲的是类的相关知识,主要是类的声明与实例化,类常量,对象初始化,属性的重载,类中的静态成员与访问
代码
实例
<?php class Demo1{} $demo1=new Demo1(); $demo1->name='杨过'; $demo1->sex='男'; $demo1->hello=function (){ return '神雕大侠'; }; echo $demo1->name.':'.$demo1->sex.'<br>'; //echo ($demo1->hello)(); echo call_user_func($demo1->hello);
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php class Demo2 {//类常量 const SITE_NAME='php中文网'; //私有属性 private $name; private $age; private $grade; //构造方法 public function __construct($name,$age,$grade) { $this->name=$name; $this->age=$age; $this->grade = $grade; $this->show(); } //输出属性内容 public function show() { return $this->name.'是'.$this->age.'岁,成绩是: '.$this->grade.'分!'; } //获取属性的重载 public function __get($name) { if($name=='grade'){ return $name.'不允许查看'; } return $this->$name; } //更新属性的重载 public function __set($name,$value) { if($name=='grade'){ return $name.'不允许修改'; } return $this->$name=$value; } //属性检测的重载 public function __isset($name) { if ($name=='grade'){ return false; } return isset($this->$name); } //销毁属性的重载 public function __unset($name) { if($name=='grade'||$name=='name'){ return false; } unset($this->$name); } } //访问类常量 echo '站点名称:'.Demo2::SITE_NAME.'<br>'; //实例化 $demo2=new Demo2('杨过','28','82'); echo $demo2->show(); echo '<hr>'; //获取 echo $demo2->name.'<br>'; echo $demo2->grade.'<br>'; //设置 $demo2->age=30; echo $demo2->age.'<br>'; //检测 echo isset($demo2->name)?'存在':'不存在'; //销毁 unset($demo2->age); echo $demo2->age;
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php class Demo3 { //父类属性 public $name; protected $age; private $salary; const APP_NAME='学生管理系统'; //父类构造器 public function __construct($name,$age) { $this->name=$name; $this->age=$age; } //属性重载 public function __get($name) { if(isset($this->$name)){ return $this->$name; } return '非法属性'; } } class Demo3_1 extends Demo3 { //子类属性 private $sex; const APP_NAME='教师管理系统'; //子类将父类同名方法进行重写 public function __construct($name,$age,$sex='男') { parent::__construct($name,$age); $this->sex=$sex; } public function __get($name) { if (isset($this->$name)) { return $this->$name; } return '非法属性'; } } $demo3_1=new Demo3('杨过','60'); echo $demo3_1->name.'<br>'; echo $demo3_1->age.'<br>'; echo $demo3_1->salary.'<br>'; echo Demo3_1::APP_NAME.'<br>'; echo $demo3_1->sex;
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
代码
实例
<?php class Demo4 { public static $name='杨过'; public static function may(){ return self::$name; } } echo Demo4::may();
运行实例 »
点击 "运行实例" 按钮查看在线实例
预览图
总结
1、类声明: class;类的实例化: new;对象成员的访问:->
2、属性重载:在类的外部访问不存在或者无权限访问的属性时,会自动触发此类方法调用,属性重载涉及四个方法:__get(),__set(),__isset(),__unset()
3、继承使用关键字: extends,子类可以将父类中的公共和受保护成员全部继承
4、静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问