魔术
方法是PHP面向对象的特性,它们是在特定
情况下触发的。它们从双下划线开始。你可以理解它们为挂钩。使用
模式方法可以很容易地实现PHP面向对象的重载(重载意味着动态
创建类
属性和方法)。
1。__construct,__destruct
__constuct叫当对象被建立;
__destruct明确破坏对象或
脚本在脚本结束时调用;
2。__get,__set
__set时称为一个属性分配是不可获得的或没有财产
__get被调用时,它读取非接触或非存在的性质
3。__isset,__unset
__isset时调用isset()或空()被称为非接触或不存在的属性
__unset被称为不可访问或不存在的属性时,
设置 4.__call, __callStatic
的__call调用时调用的方法是不可获得的或不存在的
__callstatic调用非接触或非被称为存在的静态方法
5。__sleep,__wakeup
__sleep被调用时使用序列化,这是有用的当你不需要
保存大量的对象的所有数据
__wakeup是当使用序列化,可以用来初始化一些对象称为
6。__clone
当调用对象克隆时,它用于
调整对象的克隆行为。
7。__tostring
当一个类被
转换成字符串时,它被称为
8。__invoke
以
函数方式调用对象时调用。
9。__set_state
静态方法被调用时,var_export出口类称为()。__set_state的返回值作为返回值的var_export。
10。__debuginfo
当调用var_dump()
打印一个对象,它被称为(当你不想打印所有属性)适用于php5.6版
PHP魔术方法使用如下示例:
< PHP
类的魔法
{
公开测试的var =美元;
创建对象时的构造函数调用,
公共
功能__construct()
{
回声'__construct叫'。php_eol;
}
对对象的引用被
删除,对象被销毁,调用出口()被调用,脚本被
关闭。
公共功能__destruct()
{
回声'__destruct叫'。php_eol;
}
对于调用属性分配时不可访问或不存在的
公共功能__set($name,美元的价值)
{
$;
回声'__set叫'。php_eol;
}
读不到或没有属性
公共功能__get($name)
{
回声名称;
回声'__get叫'。php_eol;
}
调用时不可访问或不存在
公共功能__call($name,$
参数)
{
回声。美元的
名字。崩溃(-,为论证);
回声'__call叫'。php_eol;
}
调用时静态方法调用不可访问或不存在。
公共静态函数__callstatic($name,$参数)
{
回声。美元的名字。崩溃(-,为论证);
回声'__callstatic叫'。php_eol;
}
在人迹罕至的或不存在的属性称为 / isset()或()称为空
公共功能__isset($name)
{
回声名称;
回声'__isset叫'。php_eol;
返回true;
}
设置 / /属性不可访问或不存在时,调用
公共功能__unset($name)
{
回声名称;
回声'__unset叫'。php_eol;
}
当 / /连载之称,它是有用的当你不需要保存大量的对象的所有数据
公共功能__sleep()
{
回声'__sleep叫'。php_eol;
返回的数组('var1111111111);
}
当 / /序列化被调用时,它可以用来做一些对象初始化
公共功能__wakeup()
{
回声'__wakeup叫'。php_eol;
美元-> var =测试后唤醒;
}
当一个类被转换为一个字符串时
公共功能__tostring()
{
返回'__tostring叫'。php_eol;
}
当克隆对象用于克隆行为调整对象时调用该对象。
公共功能__clone()
{
回声'__clone叫'。php_eol;
}
当函数调用/对象调用时
公共功能__invoke()
{
回声'__invoke叫'。php_eol;
}
当调用var_export( / /)派生类,这种方法称为静态的__set_state返回值作为返回值的var_export。
公共静态函数__set_state($ ARR)
{
返回'__set_state叫'。php_eol;
}
当调用var_dump() / /打印对象调用(当你不想打印所有属性的php5.6版)
公共功能__debuginfo($ ARR)
{
回声'__debuginfo叫'。php_eol;
返回的数组(
无功= >测试来回__debuginfo
);
}
}
$ M =新的魔法(); / / __construct称为()
$ M -> not_exist_property =试验; / / __set称为()
echo $ M -> not_exist_property; / / __get称为()
$ M -> ABC(1,2,3); / / __call称为()
回声isset($m -> not_exist_property); / / __isset()调用返回bool值
unset($m -> not_exist_property); / / __unset称为()
echo $ TMP =连载($m); / / __sleep称为()
序列化($ TMP); / / __wakeup称为()
$ M1 =克隆百万元; / / __clone()被调用,对象的引用是通过
默认情况下,
复制和对象可以使用clone关键字实现
$ M(); / / __invoke()
eval($ M2 =。var_export($m,真的)。';');var_dump(每平方米);
var_dump(百万美元);
最后,__destruct()被称为 / /
*
结果uff1a
__construct叫
not_exist_property-test__set叫
not_exist_property__get叫
abc-1,2,3__call叫
not_exist_property__isset叫
1not_exist_property__unset叫
__sleep叫
O:5:魔术:1:{:13:var1111111111 ;N;} __wakeup叫
__destruct叫
__clone叫
__invoke叫
字符串(20)__set_state叫
1级魔法#(1){
公共= $ var
字符串(4)测试
}
__destruct叫
__destruct叫
* /