批改状态:合格
老师批语:后期静态绑定, 一定是用在静态继承上下文中, 这个要记住
使用后期静态绑定可以解决继承中方法的调用问题。
属性和方法的重载,可以使程序更加健壮,实现一些复杂的访问控制
static::关键字静态绑定当前调用的类
<?php//后期静态绑定class demo1{//为每个参数两端加上*号public static function myStr(array $arr){return array_map(function($item){return "*".$item."*";},$arr);}public static function arr(array $arr){//去掉两端空白$arr = array_map(function($item){return trim($item);},$arr);//static静态调用myStr方法return static::myStr($arr);//self调用myStr方法//return self::myStr($arr);}}class demo2 extends demo1{//重写myStr方法,为每个参数两端加上`号public static function myStr(array $arr){return array_map(function($item){return "`".$item."`";},$arr);}}//父类demo1中使用self调用时,调用的是父类中的myStr方法print_r(demo2::arr([' 343 ',' sdgs','dsgd']));//输出:Array ( [0] => *343* [1] => *sdgs* [2] => *dsgd* )//父类demo1中使用static调用时,调用的是子类中重写的myStr方法print_r(demo2::arr([' 343 ',' sdgs','dsgd']));//输出:Array ( [0] => `343` [1] => `sdgs` [2] => `dsgd` )
__get()、__set()、__isset()、__unset()进行拦截处理
<?php//属性重载/拦截处理class demo3{public static $cardNo = '40124934052856029';private static $cardName = 'jack';public static $cardDate = '135145009433';//查询属性时进行处理public function __get($name){switch($name){case 'cardName':return self::$cardName;case 'cardDate':return self::$cardDate;case 'cardNo':return substr(self::$cardNo,0,6).'****'.substr(self::$cardNo,-4,4);}}//设置属性值时处理public function __set($name,$val){if($name == 'cardName') self::$cardName = trim($val) ;if($name == 'cardNo'){self::$cardNo = is_numeric($val)?$val:'0';}}public function __isset($name){return ($name==='cardNo'||$name==='cardName')?1:0;}public function __unset($name){if($name==='cardDate'){self::$cardDate='111fhd';}}}$card = new demo3;//访问拦截处理echo $card->cardNo,'<br>';//401249****6029//设置拦截处理$card->cardNo = 'hd00300';echo $card->cardNo,'<br>';//0****0//属性检测拦截处理echo isset($card->cardDate)?'在':'不在','<br>';//不在echo isset($card->cardName)?'在':'不在','<br>';//在//属性销毁拦截处理echo $card->cardDate,'<br>';//135145009433unset($card->cardDate);echo $card->cardDate;//111fhd
__call、__callstatic进行处理__call:普通方法、__callstatic:静态方法
<?php//方法重载/拦截处理//调用一个不存在的方法时自动调用class demo4{public function index(){echo '已定义的方法';}public function __call($name,$arg){echo '方法'.$name .'不存在';}public static function __callStatic($name, $arguments){echo '静态方法'.$name .'不存在';}}demo4::login();//静态方法login不存在$obj = new demo4;$obj->login();//方法login不存在$obj->index();//已定义的方法
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号