使用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)
援引