本篇文章给大家带来的内容是关于php属性重载和方法重载的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
重载: 当访问一个不存在的或者私有属性(权限不够)或方法的时候,能够触发的一些列的魔术方法
属性重载__set:设置属性的时候自动触发
__get:获取属性的时候自动触发
__isset:isset和empty时自动触发
__unset:unset的时候自动触发
<?php/** * created by intellij idea. * user: 何晓宏 * date: 2018/10/15 * time: 23:46*/class person{ public $name; private $age; function __construct($name,$age){ $this->name=$name; $this->age=$age; } function __destruct(){ //脚本执行结束析构自动执行 //可以使用unset($person) } /**魔术方法__get * 访问属性的名字 * @param $name * @return bool * array设置控制用户访问 */ public function __get($name) { $allow=array('name','age'); if(in_array($name,$allow)){ return $this->$name; }else{ return false; } } /** 魔术方法__set * 增加属性 * @param $name :属性名 * @param $value :属性值 */ public function __set($name, $value) { $arrow=array('money'); //判断用户的操作是否合法 if(in_array($name,$arrow)){ $this->$name=$value; } } /**魔术方法__isset * @param $name * @return bool */ public function __isset($name) { //可以设置array设置权限 return isset($this->$name); } /**魔术方法__unset * 删除公有私有属性 * @param $name */ public function __unset($name) { //可以设置array设置权限 unset($this->$name); }}$person=new person('hxh',18);//unset($person);//没有魔术方法__get 无法输出echo $person->age;var_dump(isset($person->age));//增加属性$person->money='100w';echo $person->money;
方法重载__call():访问一个非静态方法
__callstatic():访问一个静态方法
<?php/** * created by intellij idea. * user: 何晓宏 * date: 2018/10/15 * time: 23:46*/class person{ private function nojingtai(){ //非静态方法,实例化后才会分配内存,属于实例对象 echo __method__; } protected static function jingtai(){ //静态方法,类装载的时候就被装载到内存,属于类本身,使用效率比非静态方法要高 echo __method__; } function __construct($name,$age){ $this->name=$name; $this->age=$age; } function __destruct(){ //脚本执行结束析构自动执行 //可以使用unset($person) } /**魔术方法__call * 访问一个非静态方法 * @param $name * @param $arguments */ public function __call($name, $arguments) { $this->$name(); } /**魔术方法__callstatic * 访问一个静态方法 * @param $name * @param $arguments */ public static function __callstatic($name, $arguments) { self::$name(); }}$person=new person('hxh',18);//没有魔术方法之前出错$person->nojingtai();person::jingtai();
重载的意义
控制对象或类的允许操作范围
容错处理
以上就是本篇文章的全部内容,更多精彩请关注!!!