この記事では、PHP の属性のオーバーロードとメソッドのオーバーロードについて説明します (コード付き)。必要な方は参考にしていただければ幸いです。
オーバーロード: 存在しないプロパティまたはプライベートプロパティ(権限が不十分)またはメソッドにアクセスすると、一連のマジックメソッドがトリガーされる可能性があります
__set: 設定時に自動的にトリガーされますattributes
__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 中国語 Web サイトに注目してください。 ! !