`

php __call and __callStatic

    博客分类:
  • php
php 
阅读更多

PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

 

__call() is triggered when invoking inaccessible methods in an object context.

__callStatic() is triggered when invoking inaccessible methods in a static context.

 

<?php
class MethodTest {
    public function 
__call($name$arguments) {
        
// Note: value of $name is case sensitive.
        
echo "Calling object method '$name' "
             
implode(', '$arguments). "\n";
    }

    
/**  As of PHP 5.3.0  */
    
public static function __callStatic($name$arguments) {
        
// Note: value of $name is case sensitive.
        
echo "Calling static method '$name' "
             
implode(', '$arguments). "\n";
    }
}

$obj = new MethodTest;
$obj->runTest('in object context');

MethodTest::runTest('in static context');  // As of PHP 5.3.0
?>

分享到:
评论

相关推荐

    PHP魔术方法之__call与__callStatic使用方法

    PHP魔术方法__call和__callStatic是PHP面向对象编程中两个非常有用的功能,它们允许开发者定义当尝试调用一个不存在的方法时所要执行的操作。具体到__call和__callStatic的使用,它们主要针对对象实例方法和静态方法...

    php魔术函数__call()用法实例分析

    - `__callStatic()`: 类似于 `__call()`,但处理静态方法的调用。 - `__get()`: 当尝试访问一个不存在的属性时被调用。 - `__set()`: 当尝试设置一个不存在的属性时被调用。 - `__isset()`: 当使用 `isset()` ...

    PHP_5.3_与_PHP_5.2_开发区别和新特性

    在静态上下文中调用 `__call` 时,可以使用 `__callStatic`。 5. **对象处理的改进**: - **对象到数组转换**:在 PHP 5.3 中,一些函数(如 `array_flip`, `array_unique`)不再直接接受对象作为参数。需要先将...

    laravel框架模型中非静态方法也能静态调用的原理分析

    `__call()`和`__callStatic()`是PHP中的特殊方法,它们在对象的调用中被用作“方法不存在时的回调”。当尝试调用对象的不存在的方法时,`__call()`会被触发;当尝试在静态上下文中调用不存在的静态方法时,`__...

    php常见的魔术方法详解

    PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload  1、__get、__set  这两个方法是为在...

    php面向对象系列(完整)

    - 方法重载(Overloading):PHP不支持方法名的重载,但可以通过魔术方法`__call()`和`__callStatic()`实现类似效果。 - 方法重写(Override):子类可以覆盖父类的方法,实现不同的行为。 - 接口(Interface):...

    PHP.zip_php5.3_php5.3 chm

    当尝试调用不存在的静态方法时,系统会自动调用`__callStatic()`,从而提供了一种动态处理静态方法的机制。 ### 5. 异常处理 PHP 5.3增强了异常处理机制。`throw`语句用于抛出异常,`try-catch`块用于捕获并处理...

    php5.3php_curl

    PHP 5.3是一个重要的里程碑,引入了许多新特性,比如命名空间、lambda函数(也称为闭包)、 late static binding 和 __callStatic 方法,这些都极大地提升了代码的组织性和可维护性。 压缩包中的“php_curl.dll”...

    php教程之魔术方法的使用示例(php魔术函数)

    `__call()` 在对象上下文中调用不存在的方法时触发,而 `__callStatic()` 在静态上下文中调用不存在的方法时触发。它们都可以接收方法名称 `$name` 和参数数组 `$arguments`,然后开发者可以自定义如何处理这些调用...

    PHP Objects Patterns and Practice(5th)

    - __call() 和 __callStatic():处理未定义的方法调用。 - __construct() 和 __destruct():对象生命周期中的关键方法。 - __toString():返回对象的字符串表示。 6. SPL(Standard PHP Library): - SPL提供...

    PHP程序设计-3期(KC016) 课后习题2-2 魔术常量.doc

    `__call()`和`__callStatic()`方法在`MethodTest`类中展示了如何处理未定义的方法调用,动态执行代码。`__get()`, `__set()`, `__isset()`和`__unset()`在同一个类中用于存储对象属性在一个私有数组中,提供了对动态...

    PHP 魔术变量和魔术函数详解_.docx

    除了魔术变量,PHP还有魔术函数,如`__construct()`用于对象的构造,`__destruct()`用于对象销毁,`__get()`和`__set()`处理未定义的属性访问,`__call()`和`__callStatic()`处理未定义的方法调用等。这些函数可以...

    PHP面向对象之刀客教程03

    - **__callStatic()** 类似于__call,但针对静态方法。 通过学习“PHP面向对象之刀客教程03”,你将对这些概念有深入理解,并能在实际项目中灵活运用。实践是检验真理的唯一标准,理论结合实际案例将有助于巩固...

    php-5.2.9.tar

    2. **魔术常量和魔术方法**:例如__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__等魔术常量,以及__construct, __destruct, __call, __callStatic等魔术方法,提供了更多的元编程能力。 3. **PDO(PHP ...

    php语言历史版本更新概要php4-php7(20151209)

    3. **访问控制**:`__call`在尝试访问私有或受保护的方法时被调用。 4. **函数内部限制**:禁止在函数内部使用`func_get_arg()`等函数。 5. **命名空间**:引入了命名空间的概念,允许更好的代码组织。 6. **静态晚...

    第37天:WEB漏洞-反序列化之PHP&JAVA全解(上)1

    常见的魔术方法有 __construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__isset()、__unset()、__invoke() 等。 二、PHP 反序列化漏洞示例 以下是一个简单的反序列化漏洞示例: ```php &lt;?...

    php 的十个高级技巧

    - 魔术方法如`__construct()`, `__destruct()`, `__call()`, `__callStatic()`等,提供类对象的生命周期管理和方法调用处理。 3. **命名空间(Namespaces)**: - 命名空间允许在相同名称的类或函数之间创建逻辑...

    PHP中常用的魔术方法

    __construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic; 1,__constuct()构造函数 通常实例化完一个对象之后,都要对该对象的属性...

Global site tag (gtag.js) - Google Analytics