call_user_func_array 不执行 __callStatic 魔术方法

wajdi_jury

我有这两个类:

class Service {
    public static function __callStatic($name, $arguments)
    {
        // ... opt-out code
        $result = call_user_func_array([CacheService::class, $name], $arguments);
        // ... opt-out code
    }
}

和这个

class CacheService
{
    public static function __callStatic($name, $arguments)
    {
        // ... opt-out code
        if (self::getCacheInstance()->has('some_cache_key')) {
            return call_user_func_array(['self', $name], $arguments);
        }
        // ... opt-out code
    }

    public static function getItems()
    {
        //... do operations
    }
}

当我打电话Service::getItems();从控制器,它执行__callStaticService类,但当Service类试图调用getItems()从CacheService,它不执行__callStaticCacheService类。究竟是什么问题?

马文·费舍尔

__callStatic 仅在没有调用方法名的静态方法时才执行

您的Service类不包含getItems()方法,因此__callStatic会被执行。

CacheService确实包含它所以getItems被执行

http://php.net/manual/en/language.oop5.overloading.php#object.callstatic

例子:

<?php

class A {
    public static function __callStatic() {
        echo "A::__callStatic";
    }
}

class B {
    public static function __callStatic() {
        echo "B::__callStatic";
    }

    public static function getItems() {
        echo "B::getItems";
    }
}

A::getItems(); // A::__callStatic
B::getItems(); // B::getItems()
B::anotherFunction(); // B::__callStatic

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类中方法的call_user_func_array

来自分类Dev

PHP - call_user_func_array() 中的静态方法

来自分类Dev

在PHP中使用call_user_func_array调用非静态方法

来自分类Dev

使用call_user_func_array函数无法使用Laravel雄辩的findOrFail方法

来自分类Dev

为什么PHP比__callStatic()更喜欢__call()?

来自分类Dev

call_user_func_array()-警告:mysqli_stmt :: bind_param():变量数与准备好的语句中的参数数不匹配

来自分类Dev

php call_user_func_array()警告

来自分类Dev

call_user_func_array()用法mysqli

来自分类Dev

PHP __call()魔术方法解析参数

来自分类Dev

扩展PHP类以允许通过__callStatic找到新方法

来自分类Dev

__call和__callStatic无法正常工作或写入不正确

来自分类Dev

不执行就返回方法

来自分类Dev

方法不执行?

来自分类Dev

FirebaseRecyclerView 不执行方法

来自分类Dev

与PHP的call_user_func_array()等效的JavaScript(NodeJS)

来自分类Dev

call_user_func_array的错误控制运算符

来自分类Dev

PHP中call_user_func_array的参数

来自分类Dev

无效的类或对象错误返回的call_user_func_array()

来自分类Dev

PHP Mysqli并使用call_user_func_array

来自分类Dev

PHP中call_user_func_array的参数

来自分类Dev

asyncio方法不异步执行

来自分类Dev

对象实例的方法不执行

来自分类Dev

UISegmentControl不执行目标方法?

来自分类Dev

代码不执行特定方法

来自分类Dev

为什么 call_user_func 和 call_user_func_array() 返回类型之间存在差异

来自分类Dev

__callStatic没有被调用

来自分类Dev

PHP __callStatic作为工厂

来自分类Dev

使用call_user_func_array()动态构建准备好的语句

来自分类Dev

MySQLI使用call_user_func_array绑定参数不起作用

Related 相关文章

热门标签

归档