PHP 中__call()的使用方式
程序员文章站
2022-04-10 09:22:47
...
本篇文章主要介绍PHP 中__call()的使用方式,感兴趣的朋友参考下,希望对大家有所帮助。
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用。
例一:__call
<?php class foo { function __call($name,$arguments) { print("Did you call me? I'm $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?>
这个特殊的方法可以被用来实现JAVA中的“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例二:使用 __call 实现“过载”动作
<?php class Magic { function __call($name,$arguments) { if($name=='foo') { if(is_int($arguments[0])) $this->foo_for_int($arguments[0]); if(is_string($arguments[0])) $this->foo_for_string($arguments[0]); } } private function foo_for_int($x) { print("oh an int!"); } private function foo_for_string($x) { print("oh a string!"); } } $x = new Magic(); $x->foo(3); $x->foo("3"); ?>
引自:
_call和___callStatic这两个函数是php类 的默认函数,
__call() 在一个对象的上下文中,如果调用的方法不能访问,它将被触发
__callStatic() 在一个静态的上下文中,如果调用的方法不能访问,它将被触发
实例:
<?php abstract class Obj { protected $property = array(); abstract protected function show(); public function __call($name,$value) { if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array)) { $this->property[$array[1]] = $value[0]; return; } elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array)) { return $this->property[$array[1]]; } else { exit("<br>;Bad function name '$name' "); } } } class User extends Obj { public function show() { print ("Username: ".$this->property['Username']."<br>;"); //print ("Username: ".$this->getUsername()."<br>;"); print ("Sex: ".$this->property['Sex']."<br>;"); print ("Age: ".$this->property['Age']."<br>;"); } } class Car extends Obj { public function show() { print ("Model: ".$this->property['Model']."<br>;"); print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;"); } } $user = new User; $user ->setUsername("Anny"); $user ->setSex("girl"); $user ->setAge(20); $user ->show(); print("<br>;<br>;"); $car = new Car; $car ->setModel("BW600"); $car ->setNumber(5); $car ->setPrice(40000); $car ->show(); ?>
相关推荐:
PHP开发(17)-callback-readdir-is_dir-foreach-glob-PhpStorm
java-并发-Callable、Future和FutureTask
php-Call to a member function assign() on
以上就是PHP 中__call()的使用方式的详细内容,更多请关注其它相关文章!
推荐阅读
-
使用charAt()方法计算字符串中的重复字符
-
php中fopen不能创建中文文件名文件的问题详解
-
php中switch与ifelse的效率区别及适用情况分析_php技巧
-
谈谈PHP中require和include的区别
-
php中require和include的区别是什么?
-
PHP实现将HTML5中Canvas图像保存到服务器的方法
-
PHP中使用crypt()实现用户身份验证的代码_PHP教程
-
PHP中引入文件的方法有哪些?PHP引入文件的四种方法介绍(代码)
-
初来乍到,PHP setcookie怎么能正确使用?我写的代码只能设置两个中的一个,怎么办?
-
教你用无序列表的方式显示PHP数组中的值