php中常用魔术方法的举例
2015-07-17 17:40
543 查看
魔术方法是php面向对象特有的功能,并且有时候能实现意想不到的效果,包括前面提到的构造函数、析构函数、还有__clone函数,另外再简单的介绍几个:
1、__toSring和__invoke
根据代码可以简单地看出,第11行说明当对象被当做字符串输出时,会自动调用__toString方法,第12行说明当对象被当做方法调用时,会自动调用__invoke方法,参数要保持一致
2、__call和__callStatic方法重载
第12行调用一个不存在的公共方法时,__call魔术方法会被自动调用,当访问一个不存在的静态方法时,__callStatic方法会被自动调用,这个应用在开发中很常见,就好比所有不存在的方法都正常出现一样,这叫做方法重载
3、__get、__set、__isset、__unset属性重载
由代码可以看出,当读取不存在或不可访问的属性name时,__get()方法会被自动调用;当给不存在或不可访问的属性赋值时,__set()方法会自动调用;当对不可访问或不存在属性用isset或empty时,会自动调用__isset()方法,通过返回值可以看出,isset和empty返回值正好相反;当对不可访问或者不存在的属性使用unset销毁时,__unset()方法会被自动调用
以上就是php中常见的魔术方法了
1、__toSring和__invoke
class Moshu{ public function __tostring(){ return "This is the Class MagicTest.<br />"; } public function __invoke($x){ echo "__invoke called with parameter " . $x . "<br />"; } } $obj = new Moshu(); echo $obj; $obj(5);
根据代码可以简单地看出,第11行说明当对象被当做字符串输出时,会自动调用__toString方法,第12行说明当对象被当做方法调用时,会自动调用__invoke方法,参数要保持一致
2、__call和__callStatic方法重载
class Moshu{ public function __call($name, $arguments){ echo "Calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />"; } public static function __callStatic($name, $arguments){ echo "Static calling " . $name . " with parameters: " . implode(', ', $arguments) . "<br />"; } } $obj = new Moshu(); $obj->runTest("para1", "para2"); MagicTest::runTest("para3","para4");
第12行调用一个不存在的公共方法时,__call魔术方法会被自动调用,当访问一个不存在的静态方法时,__callStatic方法会被自动调用,这个应用在开发中很常见,就好比所有不存在的方法都正常出现一样,这叫做方法重载
3、__get、__set、__isset、__unset属性重载
class Moshu{ public function __get($name){ return "Getting the property " . $name; } public function __set($name, $value){ echo "Setting the property " . $name . " to value ". $value. "<br />"; } public function __isset($name){ echo "__isset invoked<br />"; return false; } public function __unset($name){ echo "unsetting property " . $name; } } $obj = new Moshu(); echo $obj->name . "<br />"; $obj->name = "Name Value"; echo '$obj->name is set? '. isset($obj->name) . "<br />"; echo '$obj->name is empty?' . empty($obj->name) . "<br />"; unset($obj->name);
由代码可以看出,当读取不存在或不可访问的属性name时,__get()方法会被自动调用;当给不存在或不可访问的属性赋值时,__set()方法会自动调用;当对不可访问或不存在属性用isset或empty时,会自动调用__isset()方法,通过返回值可以看出,isset和empty返回值正好相反;当对不可访问或者不存在的属性使用unset销毁时,__unset()方法会被自动调用
以上就是php中常见的魔术方法了
相关文章推荐
- 使用PHP模拟ajax请求的源代码
- ContentProvider和Observable 以及观察者模式
- php页面添加背景音乐 控制停止/播放
- php gz压缩文件案例
- php -- in_array函数
- 文件共享服务 FTP
- PHP下载远程图片的3个方法
- PHP匹配中文汉字
- svn: Checksum mismatch while updating 'D:\workspace\demo\test\.svn\text-base\test.php.svn-base'
- php 生成.txt文件
- Mac上运行php文件
- 在 CakePHP 中使用 SimpleExcel 遇到的一个问题小记
- PHP语言的十二种特性
- (转)CTP: 平昨仓与平今仓,log轻轻告诉你.......
- PHPCMS动态调用导航菜单
- php-fpm的重启/关闭
- PHP导出一个txt文本文件
- PHP 多文件上传 $_FILES 为空
- 修改PHP上传文件大小限制的方法
- magento patch php version