__call()和__callStatic()方法
__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()方法的更多相关文章
- PHP 魔术方法 __call 与 __callStatic 方法
PHP 魔术方法 __call 与 __callStatic 方法 PHP 5.3 后新增了 __call 与 __callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会 ...
- PHP中的__call和__callStatic方法
如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...
- php中__call() 和 __callStatic方法的使用
__call 与__callStatic 魔法方法是php5.3后新增的,二者的应用场景: 1.当要调用的方法不存在或权限不足时,会自动调用__call 方法. 2.当调用的静态方法不存在或权限不足时 ...
- PHP中的__call和__callStatic方法(未看完)
如何防止调用不存在的方法而出错,使用__call魔术重载方法. __call方法原型如下: mixed __call(string $name,array $arguments) 当调用一个不可访问的 ...
- PHP魔术方法之__call与__callStatic方法
<?php class human{ private function t(){ } //魔术方法__call /* $method 获得方法名 $arg 获得方法的参数集合 */ public ...
- 魔术方法之__call与__callStatic方法
<?php class human{ private function t(){ } /** * 魔术方法__call * * @param string $method 获得方法名 * @pa ...
- php中__call与__callstatic()使用
php 5.3 后新增了 __call 与__callStatic 魔法方法. __call 当要调用的方法不存在或权限不足时,会自动调用__call 方法. __callStatic 当调用的静态方 ...
- php -- 魔术方法 之 调用方法:__call()、__callStatic()
方法重载:当调用一个不存在或者权限不够的方法的时候,会自动调用__call()方法 public function __call($name,$args){} :用对象调用方法 public sta ...
- PHP:__get()、__set()、__isset()、__unset()、__call()、__callStatic()六个魔术方法
哎呀呀,今天小仓鼠学到了魔术方法,简称魔法,哈哈哈哈,神经病啊~ 平时在面试的时候,也会遇到问魔术方法有哪些的问题哦!今天我们来了解一下下~ 1.__get() 形式: __get($objName) ...
随机推荐
- 解决:Python爬取https站点时SNIMissingWarning和InsecurePlatformWarning
今天想利用Requests库爬取糗事百科站点,写了一个请求,却报错了: 后来参考kinsomy的博客,在cmd中pip install pyopenssl ndg-httpsclient pyasn1 ...
- Android自定义组件之ListView
1-ListView简介 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.一个ListView通常有两个职责. (1)将数据填充到 ...
- 分布式_理论_04_ 3PC
一.前言 五.参考资料 1.分布式理论(四)—— 一致性协议之 3PC 2.分布式理论(四) - 3PC协议 3.
- awk---Linux下文本处理五大神器之二
转自:http://www.cnblogs.com/dong008259/archive/2011/12/06/2277287.html awk是一个非常棒的数字处理工具.相比于sed常常作用于一整行 ...
- Python 2.7_多进程获取简书专题数据(一)
学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页 ...
- 使用swing构建一个界面(包含flow ,Border,Grid,card ,scroll布局)
package UI; import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Cursor;import ja ...
- Yii 查询 搜索
一.视图 <div class="form-horizontal"> <?php $form = $this->beginWidget('CActiveFo ...
- 关于C语言字符串函数使用的一点心得
就字符串的拼接函数为例strcat. 原型:extern char *strcat(char *dest,char *src);用法:#include <string.h> 功能:把src ...
- angular 的杂碎报错小知识
1:[ng:areq] Angular出现这种错误的原因,是由于没有在页面中使用模块引入controller导致的 所以 请确保你定义了这个controller后也引用了它. 2:Failed to ...
- web打印详解
在B/S模式开发中,打印是个很大的困扰.无论是采用页面直接输出或者引用WORD.DLL也好,都有不足之处. 目前最好的办法就是采用第三方控件,网上流传的打印控件有很多.总结了下推荐几个给大家: 一.首 ...