gpt4 book ai didi

php - 是否允许使用 call_user_func 调用非静态方法?

转载 作者:可可西里 更新时间:2023-10-31 22:40:28 24 4
gpt4 key购买 nike

当我在 PHP 5.2 中的非静态方法上使用 call_user_func 时,我收到严格警告:

Strict Standards: Non-static method User::register() cannot be called statically

但是在 PHP 5.3.1 上我没有收到这个警告。这是 PHP 5.3.1 中的错误还是删除了警告?

最佳答案

完全没问题——但请注意,您必须传递一个对象,该对象是您的类的一个实例,以指示应在哪个对象上调用非静态方法:

class MyClass {
public function hello() {
echo "Hello, World!";
}
}

$a = new MyClass();
call_user_func(array($a, 'hello'));


你不应该使用这样的东西:

call_user_func('MyClass::hello');

这会给你以下警告:

Strict standards: `call_user_func()` expects parameter 1 to be a valid callback,
non-static method `MyClass::hello()` should not be called statically

(如果该方法被声明为静态的,这将工作得很好......但它不是,在这里)


有关更多信息,您可以查看 callback手册的一部分,除其他内容外,(引用):

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.


如果您在使用旧版本的 PHP(例如 5.2)时遇到严重错误,则可能是配置问题——我正在考虑 error_reporting指令。

请注意 E_ALL 包括 E_STRICT 来自 PHP 5.4.0 ( quoting ) :

关于php - 是否允许使用 call_user_func 调用非静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com