PHP 的__call()
来源:互联网 发布:知乎神经性耳鸣5年 编辑:程序博客网 时间:2024/04/30 02:40
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用。
例七:__call
这个特殊的方法可以被用来实现JAVA中的“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例八:使用 __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();
- ?>
0 0
- PHP 的__call()
- PHP 的__call()
- php中__call的使用方法
- PHP __call
- php的魔法方法__call使用
- 关于PHP的魔术方法__call()
- php的__call 与__callStatic 方法
- php魔术方法__call的用法
- PHP __call()方法
- PHP __call()方法
- php __call 与 __callStatic
- php 魔法函数 __call
- php __call 与 __callStatic
- PHP魔法函数:__call()
- php 魔术方法 __call
- php __call() 和 __callStatic()
- php __call()方法
- PHP __call()方法
- sed命令n,N,d,D,p,P,h,H,g,G,x解析
- JAVA爬取is老师信息并存到数据库
- OOAD作业---设计模式---访问者模式
- 连连看算法分析
- Linux操作系统中的系统调用接口函数
- PHP 的__call()
- 用 logcat 命令来查看 android 系统日志缓冲区的内容
- 输入框 UITextField 基本属性
- C++ this指针的使用
- .net的基于mysql的DBhelper实现
- SVN检出的MAVEN项目转换为web项目
- hdu 1010
- 站在巨人的肩膀上学习Android开发
- PHP函数:var_export()