__call()
   当对象访问不存在的方法时,__call()方法会被自动调用
__callStatic()
   当对象访问不存在的静态方法时,__callStatic()方法会被自动调用

这两个方法在PHP里面也叫方法的重载(overloading)
   注意区分重写(overwrite)
   通过这两个方法,同一个方法的名称的调用可以对应不同的方法实现

 <?php
class MagicTest{
//方法重载
//这个方法的参数第一个就是调用的方法的名称,
//第二个参数是方法调用的参数组成的数组
public function __call($name,$arguments) {
echo " Calling ".$name." whith parameters:".implode(", ",$arguments);
}
} $obj = new MagicTest();
$obj->runTest("para1","para2");

输出: Calling runTest whith parameters:para1, para2

MagicTest() 是不存在 runTest() 函数的,这时自动调用 __call() 函数

 <?php
class MagicTest{
public static function __callStatic($name,$arguments) {
echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
}
} $obj = new MagicTest();
MagicTest::runTest("para1","para2");

还有值得说的一点就是,两个函数可以同时出现

 <?php
class MagicTest{
public function __call($name,$arguments) {
echo " Calling ".$name." whith parameters:".implode(", ",$arguments)."<br/>";
}
public static function __callStatic($name,$arguments) {
echo "Static Calling ".$name." whith parameters:".implode(", ",$arguments);
}
} $obj = new MagicTest();
$obj->runTest("para1","para2");
MagicTest::runTest("para1","para2");

输出:

Calling runTest whith parameters:para1, para2
Static Calling runTest whith parameters:para1, para2

正常时候是不允许同时出现两个相同的名称的( runTest ),

但在面向对象的魔术方法中却可以。

__call()和__callStatic()方法的更多相关文章

  1. PHP 魔术方法 __call 与 __callStatic 方法

    PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...

  2. PHP中的__call和__callStatic方法

    如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...

  3. php中__call() 和 __callStatic方法的使用

    __call 与__callStatic 魔法方法是php5.3后新增的,二者的应用场景: 1.当要调用的方法不存在或权限不足时,会自动调用__call 方法. 2.当调用的静态方法不存在或权限不足时 ...

  4. PHP中的__call和__callStatic方法(未看完)

    如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...

  5. PHP魔术方法之__call与__callStatic方法

    <?php class human{ private function t(){ } //魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ public ...

  6. 魔术方法之__call与__callStatic方法

    <?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @pa ...

  7. php中__call与__callstatic()使用

    php 5.3 后新增了 __call 与__callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会自动调用__call 方法. __callStatic 当调用的静态方 ...

  8. php -- 魔术方法 之 调用方法:__call()、__callStatic()

    方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法 public function __call($name,$args){}  :用对象调用方法 public sta ...

  9. PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法

    哎呀呀,今天小仓鼠学到了魔术方法,简称魔法,哈哈哈哈,神经病啊~ 平时在面试的时候,也会遇到问魔术方法有哪些的问题哦!今天我们来了解一下下~ 1.__get() 形式: __get($objName) ...

随机推荐

  1. cocos2d-js 创建帧动画

    封装创建方法 var RunActionHelper = function(){ };RunActionHelper.prototype.createAnimationByPlist = functi ...

  2. mysql 授予远程连接直接访问

    不通过ssh通道,mysql 授予远程连接直接访问 语句 GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '!DSJdg!' WITH GR ...

  3. hibernate.spring.xml

    <!-- 配置数据库连接池(c3p0) --> <!-- <bean id="dataSource" class="com.mchange.v2. ...

  4. hdu-1102-Constructing Roads(Prim算法模板)

     题目链接 /* Name:hdu-1102-Constructing Roads Copyright: Author: Date: 2018/4/18 9:35:08 Description: pr ...

  5. Codeforces Round #266 (Div. 2)B(暴力枚举)

    很简单的暴力枚举,却卡了我那么长时间,可见我的基本功不够扎实. 两个数相乘等于一个数6*n,那么我枚举其中一个乘数就行了,而且枚举到sqrt(6*n)就行了,这个是暴力法解题中很常用的性质. 这道题找 ...

  6. Codeforces Round #263 (Div. 2)C(贪心,联想到huffman算法)

    数学家伯利亚在<怎样解题>里说过的解题步骤第二步就是迅速想到与该题有关的原型题.(积累的重要性!) 对于这道题,可以发现其实和huffman算法的思想很相似(可能出题人就是照着改编的).当 ...

  7. Centos 7 安装 Python3.7

    目录 下载Python Python安装 遇到问题 错误: configure: error: no acceptable C compiler found in $PATH 错误: can't de ...

  8. 调整 WiFi 驱动设置让 WiFi 信号更稳定

    调整 WiFi 驱动设置让 WiFi 信号更稳定 修改 WiFi 驱动中 的设置,将 Power Saving Mode 的值改为 CAM.

  9. spark流程跟踪

    每个action对应一个job,每个job里面会有很多个阶段(stage),其实每个stage都是一个算子(Operation),可能是transformation,可能是action:但是actio ...

  10. bzoj 2655 calc——拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655 先考虑DP.dp[ i ][ j ]表示值域为 i .选 j 个值的答案,则 dp[ ...