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的使用,它们主要针对对象实例方法和静态方法...
- `__callStatic()`: 类似于 `__call()`,但处理静态方法的调用。 - `__get()`: 当尝试访问一个不存在的属性时被调用。 - `__set()`: 当尝试设置一个不存在的属性时被调用。 - `__isset()`: 当使用 `isset()` ...
在静态上下文中调用 `__call` 时,可以使用 `__callStatic`。 5. **对象处理的改进**: - **对象到数组转换**:在 PHP 5.3 中,一些函数(如 `array_flip`, `array_unique`)不再直接接受对象作为参数。需要先将...
`__call()`和`__callStatic()`是PHP中的特殊方法,它们在对象的调用中被用作“方法不存在时的回调”。当尝试调用对象的不存在的方法时,`__call()`会被触发;当尝试在静态上下文中调用不存在的静态方法时,`__...
PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload 1、__get、__set 这两个方法是为在...
- 方法重载(Overloading):PHP不支持方法名的重载,但可以通过魔术方法`__call()`和`__callStatic()`实现类似效果。 - 方法重写(Override):子类可以覆盖父类的方法,实现不同的行为。 - 接口(Interface):...
当尝试调用不存在的静态方法时,系统会自动调用`__callStatic()`,从而提供了一种动态处理静态方法的机制。 ### 5. 异常处理 PHP 5.3增强了异常处理机制。`throw`语句用于抛出异常,`try-catch`块用于捕获并处理...
PHP 5.3是一个重要的里程碑,引入了许多新特性,比如命名空间、lambda函数(也称为闭包)、 late static binding 和 __callStatic 方法,这些都极大地提升了代码的组织性和可维护性。 压缩包中的“php_curl.dll”...
`__call()` 在对象上下文中调用不存在的方法时触发,而 `__callStatic()` 在静态上下文中调用不存在的方法时触发。它们都可以接收方法名称 `$name` 和参数数组 `$arguments`,然后开发者可以自定义如何处理这些调用...
- __call() 和 __callStatic():处理未定义的方法调用。 - __construct() 和 __destruct():对象生命周期中的关键方法。 - __toString():返回对象的字符串表示。 6. SPL(Standard PHP Library): - SPL提供...
`__call()`和`__callStatic()`方法在`MethodTest`类中展示了如何处理未定义的方法调用,动态执行代码。`__get()`, `__set()`, `__isset()`和`__unset()`在同一个类中用于存储对象属性在一个私有数组中,提供了对动态...
除了魔术变量,PHP还有魔术函数,如`__construct()`用于对象的构造,`__destruct()`用于对象销毁,`__get()`和`__set()`处理未定义的属性访问,`__call()`和`__callStatic()`处理未定义的方法调用等。这些函数可以...
- **__callStatic()** 类似于__call,但针对静态方法。 通过学习“PHP面向对象之刀客教程03”,你将对这些概念有深入理解,并能在实际项目中灵活运用。实践是检验真理的唯一标准,理论结合实际案例将有助于巩固...
2. **魔术常量和魔术方法**:例如__FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__等魔术常量,以及__construct, __destruct, __call, __callStatic等魔术方法,提供了更多的元编程能力。 3. **PDO(PHP ...
3. **访问控制**:`__call`在尝试访问私有或受保护的方法时被调用。 4. **函数内部限制**:禁止在函数内部使用`func_get_arg()`等函数。 5. **命名空间**:引入了命名空间的概念,允许更好的代码组织。 6. **静态晚...
常见的魔术方法有 __construct()、__destruct()、__call()、__callStatic()、__get()、__set()、__isset()、__unset()、__invoke() 等。 二、PHP 反序列化漏洞示例 以下是一个简单的反序列化漏洞示例: ```php <?...
- 魔术方法如`__construct()`, `__destruct()`, `__call()`, `__callStatic()`等,提供类对象的生命周期管理和方法调用处理。 3. **命名空间(Namespaces)**: - 命名空间允许在相同名称的类或函数之间创建逻辑...
__construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic; 1,__constuct()构造函数 通常实例化完一个对象之后,都要对该对象的属性...