Heim > Artikel > Backend-Entwicklung > php属性重载和方法重载的介绍(附代码)
本篇文章给大家带来的内容是关于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();
重载的意义
控制对象或类的允许操作范围
容错处理
以上就是本篇文章的全部内容,更多精彩请关注PHP中文网!!!