批改状态:合格
老师批语:这二个技术, 都是非常重要, 而且也是非常不好理解的, 一定要多看几遍视频
<?php// 后期静态绑定: 又叫延迟静态绑定// 后期静态绑定工作在: 静态继承上下文的环境中class Pro{public static function ds(){return __CLASS__;// 关键字:atatic,// 定义在调用该方法时与调用类进行绑定static::ds();}}class Pro1 extends Pro{}// 客户端$a = new pro;var_dump($a);echo '<hr>';$b = new pro1;var_dump($b);echo '<hr>';
// 构造方法: __construct(), 是类的实例化过程中被自动调用, new 的时候,也叫构造器// 功能就是生成一个新对象// 构造器:__construct()class A{public $dis = 12;public $dos = 55;public function lii(){echo __CLASS__;}public function __construct($dis,$dos) //通过在构造函数括号内定义属性,传给构造方法{// 初始化新对象,添加属性并赋值$this->dis = $dis;$this->dos = $dos;// 自动执行操作$this->lii();}}// $c = new A(33,66);$c = new A(33,66);echo $c->dis; //33echo $c->dos; //66
// 属性拦截器:拦截类外部属性访问// 访问属性拦截器:__get()// 设置属性拦截器:__set()// 检测属性拦截器:__isset()// 删除属性拦截器:__unset()// 使用场景: 当用户访问一个不存在的或无权限访问属性/方法时, 自动调用class Abs{private $bus = '公交车';private $car = '比亚迪';//创建访问属性拦截器public function __get($num){// 先事先约定一些方法专用于处理属性访问$k = 'get' . ucfirst($num); // 把拦截到的数据当成参数赋值给$k// 转发访问请求return method_exists($this,$k) ? $this->$k():'';//检查函数是否存在,如果存在就执行这个函数,否则打印空字符串}// 方法1private function getBus(){return $this->bus;}// 方法2private function getCar(){return $this->car;}//创建设置属性拦截器public function __set($name, $value){// 先事先约定一些方法专用于处理属性访问$method = 'set' . ucfirst($name); // 把拦截到的数据当成参数赋值给$k// 转发访问请求return method_exists($this,$method) ? $this->$method($value) : '';//检查函数是否存在,如果存在就执行这个函数,否则打印空字符串}// 方法1private function setBus($value){$this->bus = '中国的' . $value;}// 方法2private function setCar($value){$this->car = '中国的' . $value;}//创建检测属性拦截器public function __isset($name){return $name === 'bus' ? isset($this->bus) : 'false';// return $name === $this->bus ? isset($this->bus) : false;//检查属性是否存在,如果存在就检查这个属性,否则打印空字符串}// 创建属性销毁拦截器public function __unset($name){unset($this->bus);}}$p = new Abs;echo '<hr>';echo $p->bus;echo '<hr>';echo $p->car;echo '<hr>';$p->bus = '奇瑞';$p->car = '长安';echo $p->bus;echo '<hr>';echo $p->car;echo '<hr>';var_dump(isset($p->bus));echo '<hr>';unset($p->bus);var_dump(isset($p->bus));
/ 方法拦截器// __call(参数1 , 参数2):当工作端访问不存在或者无权限的方法时调用// __callStatic(参数1 , 参数2):当工作端访问不存在或者无权限的‘静态’方法时调用// 参数1:方法名称// 参数2:传递给当前方法的参数列表public function __call($name , $v){return __CLASS__ . implode('- ', $v);}// 静态方法拦截器public static function __callStatic($name , $v){return __CLASS__ . implode('- ', $v);}}echo '<hr>';echo $p->kkkk(5,6,4);echo '<hr>';echo Abs::kkkk(6,7,8,9);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号