__callStatic не вызывается.

class m
{
  public static function __callStatic($name, $arguments)
  {
      echo "Calling static method '$name' "
           . implode(', ', $arguments). "
";
  }
}

class MethodTest extends m
{
    public function __call($name, $arguments)
    {
        echo "Calling object method '$name' "
             . implode(', ', $arguments). "
";
    }
}

class MethodTest2 extends m
{
    public function index()
    {
      MethodTest::test();
    }


}
call_user_func(['MethodTest2','index']);

Строгие стандарты: call_user_func () ожидает, что параметр 1 является допустимым обратным вызовом, нестатический метод MethodTest2 :: index () не должен вызываться статически в /var/www/html/api/index.php в строке 45. Вызов статического метода ' тестовое задание'

Всего 1 ответ


Вы должны проверить это: перегрузка

Методы перегрузки вызываются при взаимодействии со свойствами или методами, которые не были объявлены или не видны в текущей области .

__callStatic() срабатывает при вызове недоступных методов в статическом контексте .

Вы вызываете нестатический метод статически , метод уже объявлен, но не является статическим в текущей области.

__callStatic работает только для методов, которые еще не определены .

Так что если вы попробуете это будет работать:

$test2 = new MethodTest2();
call_user_func([$test2,'index']);
// => Calling static method 'test'
// Because $test2 calling index() method, and then MethodTest calling test() method which doesn't exist.

Есть идеи?

10000