跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

php 魔术方法详解,php魔术详解_PHP教程

php魔术方法详解,php魔术详解从php 5以后的版本,php中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。php 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。

__toString() 和__invoke() public string __toString ( void ):当对象被当做string使用时,这个方法会被自动调用。此方法必须返回一个字符串复制代码代码如下:class Magic{public function  __tostring(){return "hello world!";}}$obj = new Magic();echo $obj;//hello world!?>__invoke():当对象被当成方法调用时,这个方法会被自动调用。

复制代码代码如下:class Magic{public function  __tostring(){return "hello world!";}public function __invoke($x){echo "__invoke called with param ".$x."\n";}}$obj = new Magic();$obj(10);//__invoke called with param 10?>__call()和__callStatic()立即学习“PHP免费学习笔记(深入)

”;

__call():当对象访问不存在的方法名称时,__call()方法会被自动调用__callStatic():当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现复制代码代码如下:class Magic{//`$name` 参数是要调用的方法名称。`$arguments` 参数是一个枚举数组,//包含着要传递给方法 `$name` 的参数。

public function __call($name,$arguments){//implode() 函数把数组元素组合为一个字符串。implode(separator,array) echo "Calling " . $name ." with param: ".implode(", ",$arguments)."\n";}}$obj = new Magic();$obj->run("para1","para2");//obj去调用run方法,输出:Calling run with param: para1, para2?>__get()和__set()在给不可访问属性赋值时,__set()会被调用读取不可访问属性的值时,__get()会被调用复制代码代码如下:class Magic{//function 前要有static关键字public function __get($name){return "Getting the property " . $name;}}$obj = new Magic();echo $obj->className."\n";//Getting the property className?>读取不可访问属性的值时,__get()会被调用复制代码代码如下:class Magic{public function __set($name,$value){echo "Setting the property " . $name ."to value ". $value ."\n";}}$obj = new Magic();$obj->className = 'MagicClass';//Setting the property classNameto value MagicClass?>__isset()和__unset()当对不可访问属性调用isset()或empty()时,__isset()会被调用当对不可访问属性调用unset()时,__unset()会被调用复制代码代码如下:class Magic{public function __isset($name){echo "__isset invoked\n";return true;}}$obj = new Magic();echo '$obj->className is set?'.isset($obj->className)."\n";//__isset invoked     $obj->className is set?1?>以上便是8个php面向对象的魔术方法的介绍与示例,希望对大家能有所帮助http://www.bkjia.com/PHPjc/909341.html www.bkjia.com true http://www.bkjia.com/PHPjc/909341.html TechArticle php 魔术方法详解,php魔术详解 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法...

相关文章