call_user_func_array不执行__callStatic魔法方法

call_user_func_array does not execute __callStatic magic method

我有这两个 classes:

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(); 时,它在 Service class 中执行 __callStatic,但是当 Service class 尝试从 CacheService 调用 getItems(),它不会在 CacheService class 中执行 __callStatic。 到底是什么问题?

__callStatic只在没有调用方法名

的静态方法时执行

您的 Service class 不包含 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