我有这两个类:
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();
从控制器,它执行__callStatic
的Service
类,但当Service
类试图调用getItems()
从CacheService,它不执行__callStatic
的CacheService
类。究竟是什么问题?
__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] 删除。
我来说两句