本文目录
详解php的魔术方法__get()和__set()使用介绍
先看看php官方文档的解释:__set()isrunwhenwritingdatatoinaccessibleproperties.__get()isutilizedforreadingdatafrominaccessibleproperties.究竟用中文怎么翻译呢?inaccessible:n.难达到;难接近;无法理解。有代码有真相:复制代码代码如下:《?phperror_reporting(E_ALL);classstu{private$a;private$b=0;public$c;public$d=0;//这里的private可以用protectedpublic替代privatefunction__get($name){return123;}//这里的private也可以用protectedpublic替代privatefunction__set($name,$value){echo"Thisissetfunction";}}$s=newstu();var_dump($s-》a);//output:123var_dump($s-》b);//output:123var_dump($s-》c);//output:nullvar_dump($s-》d);//output:0var_dump($s-》e);//output:123$s-》a=3;//output:Thisissetfunction$s-》c=3;//nooutput$s-》f=3;//output:Thisissetfunction?》结果分析:如果没有__get方法,执行var_dump($s-》a)var_dump($s-》b)会有致命的错误如果没有__get方法,执行var_dump($s-》e)会有一个notice,提示没有定义属性$e总结:1.从一个难以访问的属性读取数据的时候__get()方法被调用2.向一个难以访问的属性赋值的时候__set()方法被调用3.难以访问包括:(1)私有属性,(2)没有初始化的属性4.__isset()__unset()也类似
php的魔术方法
PHP的魔术方法:
1、__construct() :实例化对象时自动调用。
2、__destruct() :销毁对象或脚本执行结束时自动调用。
3、__call($name, $args) :调用对象不存在得方法时执行此函数。
4、__get() :获取对象不存在的属性时执行此函数。
5、__set() :设置对象不存在的属性时执行此函数。
6、__isset() : 检测对象的某个属性是否存在时执行此函数。
7、__unset() :销毁对象的某个属性时执行此函数。
8、__toString() :将对象当作字符串输出时执行此函数。
9、__clone() :克隆对象时执行此函数。
10、__autoload() :实例化对象时,当类不存在时,执行此函数自动加载类。
11、__sleep() :serialize之前被调用,可以指定要序列化的对象属性。
12、__wakeup :unserialize之前被调用,可以执行对象的初始化工作。
13、__set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。
php什么是魔术方法
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为"魔术方法"(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。