PHP 的__call()】的更多相关文章

1.__get.__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的: __get( $property ) 当调用一个未定义的属性时访问此方法: __set( $property, $value ) 给一个未定义的属性赋值时调用: 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性). 2.__isset.__unset __isset( $property ) 当在一个未定义的属性上调用isset()函数时调用此方法: _…
(1) __clone方法在一个对象赋值给另外的一个对象的时候自动调用 <?php class A { public $a = "aa"; public $b = 10; function __clone() { $this->a = "bb"; $this->b = 2; } function __toString() { return $this->a."{$this->b}"; } } $a= new A();…
工作半年了,感觉这半年学到的东西比大学四年学到的还要多,主要原因是心静下来了,目标也明确了,不会去整天的和游戏纠缠在一起了.大学时候其实也意识到了玩游戏会影响自己的正常学习和工作的,但是一直控制不了自己,还是忍不住经常去玩,没日没夜的玩(本来就是闷骚男,还宅着玩游戏,这也是大学四年只有游戏.左右手,没有女朋友的一个原因了).现在工作了,每天都有任务,看到旁边的牛人们在项目中如鱼得水,就有了赶超他们的想法,于是每天都会给自己一个额外的小任务去学习新的知识,到现在工作有半年了,对以前不熟悉的linu…
在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这个时候我们就要使用在调用不存在的方法时自动调用的方 法“__call()”. <?php // 这是一个测试的类,里面没有属性和方法 class Test { } // 产生一个Test类的对象 $test = new Test(); // 调用对象里不存在的方法 $test…
简而言之就是调用了一个类中没有的方法就会自动调用__call()方法, 该参数有两个必须的参数! 第一个参数:调用的不存在的方法的方法名. 第二个参数:调用不存在的方法的参数. 但是总的说回来,__call方法的具体作用是什么呢? 目录----------------------------------------------------------------- 00x1 不存在案例. ------------------------------------------------------…
1. ev={} . functin ev.__call() . print "called from ev" . end . . setmetatable(ev, ev) . . -- test it . ev()…
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…
__toString()适用于直接输出类,用此方法,可以避免出错:__call()适用于使用类当中没有定义的函数(方法) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>__toString()与__call()</title> </head> <body> <?php class Point{ public fu…
<?php class Car{ protected $_color; protected $_model; public function __call($name,$arguments){ $first=isset($arguments[0]) ? $arguments[0] : null; switch ($name) { case 'getColor': return $this->_color; case 'setColor': $this->_color=$first; re…
在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.上代码: <?php class Person{ function say(){ echo "Hello, wblog!<br>"; } } $Person=new Person(); $Person->run("teacher"); //调用对象中不存在的方法run $Person->eat("child", "ap…
作用:当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call方法来储方法名及参数. __call方法包含两个参数:即方法名和方法参数.其中,方法参数是以数组形式存在的.…
在程序开发中,如果在使用对象调用对象内部方法时候,调用的这个方法不存在那么程序就会出错,然后程序退出不能继续执行.那么可不可以在程序调用对象内部 不存在的方法时,提示我们调用的方法及使用的参数不存在,但程序还可以继续执行,这个时候我们就要使用在调用不存在的方法时自动调用的方 法“__call()”. <?php //这是一个测试的类,里面没有属性和方法 class Test { } //产生一个Test类的对象 $test = new Test(); //调用对象里不存在的方法 $test->…
魔术方法  __call <?php //文件名:index.php define('a',__DIR__); include '/IMooc/Loader.php'; spl_autoload_register('\\IMooc\\Loader::autoload'); $Object = new \IMooc\Object(); echo $Object->test("哎哟喂",123);//在调用test不存在的方法时,会自动调用__call方法 /*输出: stri…
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $proper…
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone() 等方法在 PHP 中被称为"魔术方法"(Magic methods).在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能. PHP4中已经有了重载的语法来建立对于外…
<?php /*** 魔术方法: 是指某些情况下,会自动调用的方法,称为魔术方法 PHP面向对象中,提供了这几个魔术方法, 他们的特点 都是以双下划线__开头的 __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() 和 __clone()…
<?php class Person { function du() { echo "这是一个存在的方法"; } //该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $args 则以数组的方式接收不存在方法的多个参数. function __call($function_name, $args) { echo "你所调用的函数:".$function_name; echo "它的参数:"; va…
在C++和java中,可以函数参数的个数或类型来进行重载.但php是弱类型的语言,无法采用传统的方法.若下面这样: class Person{ function fun1($a) { echo 'fun1 '.$a.'<br/>'; } function fun1($a,$b) { echo 'fun1 '.$a.' '.$b.' <br/>'; } }$t=new Person(); $t->fun1(1); 会报错: Fatal error: Cannot redecla…
因为php是弱类型语言,不喜欢c++通过改变函数返回相同的值键入的参数的数目和功能将过载!但在需求函数的实际发展可能过载.开发需求,我们能够通过魔术方法__call()来实现函数重载. class Templates { <span style="white-space:pre"> </span>function __call($fun,$argv){ <span style="white-space:pre"> </spa…
PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会自动调用__call 方法. __callStatic 当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法. class Animal { private function eat() { echo 'eat'; } public function __call($name,…
<?php class Demo { //第一个参数是方法名,第二个参数是方法参数,以数组形式传入 public function __call($method,$args) { //遍历参数$args $var = ''; foreach ($args as $value){ $var .= $value.',';// .= 字符串的连接运算 } return '方法是'.$method.'('.$var.')'.'不存在'; } //当我们调用一个不存在的静态方法时,会自动调用 __call…
好久没有上博客园写文章了,今晚终于有点空了,就来写一下昨天的一点小发现. 我自己所知,C++,Java的面向对象都有多态的特点,而PHP没有,但PHP可以通过继承链方法的重写来实现多态的属性.而魔术方法会在特定情况下被触发,我们也可以对其进行重写. ---------------------------------------------------------------------------------------------------------摘抄开始----------------…
为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $args 则以数组的方式接收不存在方法的多个参数 function __call($func_name, $args) { echo "你所调用的函数:$func_name(参数:<br />"; var_dump($args); echo &…
如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的方法(如未定义,或者不可见时), __call()就会被调用.其中$name参数是要调用的方法名称.$arguments参数是一个数组,包含者要传递给方法的参数, 如下所示: <?php class HandsonBoy { private $name = 'chenqionghe'; privat…
<?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @param string $arg 获得方法的参数集合 */ public function __call($method, $params){ echo '你想调用我不存在的方法', $method, '方法'; echo '还传了一个参数'; print_r($params); } //魔术方法__cal…
刚开始学习魔术方法时对__get().__set() 和__call()的用法和作用不是太了解,也有一些误解... 现在分享一下个人的理解,大家共勉一下: __get().__set() 和__call()是很常用的,虽然不像__construct.__destruct运用的那么多,但是它们地位也是毋庸置疑的, __construct.__destruct大家肯定非常熟悉了,在这就不多说了,直接看—————__get().__set() 和__call(): 1. __call : 规则: mi…
__call 与__callStatic 魔法方法是php5.3后新增的,二者的应用场景: 1.当要调用的方法不存在或权限不足时,会自动调用__call 方法. 2.当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法. class Person { public function __call($method, $arguments) { echo '我是要调用的不存在的动态方法名: ', $method, '<br>'; echo '以下是通过__call方法显示的参…
首先, __call是php语言自身就具有的一种语言features...,不是thinkphp的语言特征. 关于__call参考: http://love-love-l.blog.163.com/blog/static/21078304201042492356650/ php是一种若类型语言, 对变量类型没有做强制要求, 如false, 0, null, ""被认为是像等的, 所以在某些额 函数的最后,如果要进行类型区分, 要指明 参数 $strict = true __call是针…
PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload 1.__get.__set这两个方法是为在类和他们的父类中没有声明的属性而设计的__get( $property ) 当调用一个未定义的属性时访问此方法__set( $proper…
/** * person class */ class Person { /** * person class -> function say */ public static function say($i) { echo "hi-->"; var_dump($i); //return "hi"; } } class Dog{ public function say() { echo "wang !"; } } APO的主要思路 (…