使用PHP魔术方法的例子

(1)__get / __set:接管对象的属性

当访问不存在的对象属性时:

index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

当属性不存在时,在PHP中访问对象

echo $ obj ->标题;



一个错误会抛出:注意:未定义的属性:普通对象:标题:美元D:练习 PHP 设计 psr0 index.php在9线

当__set和__get方法加入到普通/ object.php

object.php

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

功能__set(美元,美元的价值){

}



功能__get($键){

}

}



如果你执行的index.php,你不会有任何的错误。

普通/ object.php再次修改

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

受保护的数组=();



功能__set(美元,美元的价值){

var_dump(__method__);

$这个数组;

}



功能__get($键){

var_dump(__method__);

返回这个数组;

}

}



index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

$obj->title ='hello';

echo $ obj ->标题;



执行index.php,页输出:

复制代码代码如下所示:

string'common 对象::__set(长度= 20)

string'common 对象::__get(长度= 20)

你好



__call / __callstatic:呼叫控制PHP对象的方法(__callstatic用来控制该类的静态方法)

当一个不存在的PHP方法被执行时

Index.php:

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

当执行不存在的PHP方法时

$ obj ->测试(你好,123);



index.php的执行将报告一个致命的错误:致命错误:调用未定义的方法常见的对象::测试()D:练习 PHP 设计 psr0 index.php,9。

如果一个__call法是在普通/对象定义,函数会自动回调的方法时,不存在。

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

功能__call($函数参数,$){ / / $函数方法名称参数参数

var_dump($函数参数,美元);

返回魔法函数;返回作为返回值的字符串

}

}



index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

当执行不存在的PHP方法时

echo $ obj ->测试(你好,123);



页面输出:

复制代码代码如下所示:

string'test(长度= 4)

阵列

0 = string'hello(长度= 5)

1 = int 123

神奇的功能



当调用不存在的静态方法时

普通/ object.php

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

静态函数__callstatic($name,$参数){

var_dump($name,$参数);

返回魔法函数;返回作为返回值的字符串

}

}



注:本__callstatic方法也应声明一个静态方法

index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

执行静态方法不存在





执行index.php,页输出:

复制代码代码如下所示:

string'test(长度= 4)

阵列

0 = string'hello(长度= 5)

1 = int 1234

神奇的功能



__tostring:将PHP对象转换为字符串

index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

echo $ obj;



在这个时候,我们将报告错误:开捕致命错误:类常见对象不能转换,是错误:8。

对object.php添加__tostring方法

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

功能__tostring(){

返回__class__;

}

}



__invoke:当PHP对象作为函数来执行,这个神奇的方法将回调

index.php

复制代码代码如下所示:

< PHP

定义('basedir ',__dir__); / /定义根目录常量

包括basedir, / / PHP的装载机;

spl_autoload_register('%s'常见装载机::加载的);

$ obj =新普通对象();

echo $ obj(测试);



object.php

复制代码代码如下所示:

< PHP

命名空间常见;

类对象{

功能__invoke(美元的){

var_dump(美元的);

return'invoke;

}

}



页面输出:

复制代码代码如下所示:

string'test(长度= 4)

援引