Можно ли вызвать обычный метод в __callStatic?

Всем привет !
В данный момент читаю книгу "PHP Cookbook (3rd edition)" от David Sclar, Adam Trachtenberg.
В главе 7.15 приведен код ,я туда добавил свой метод WhyNotCall():

class User {
public function WhyNotCall(){
 echo "1 2 3";
}
static function find($args) {
 echo "<pre>";
 print_r($args);
 echo "</pre>";
}
static function __callStatic($method, $args) {
 if (preg_match('/^findBy(.+)$/', $method, $matches)) {
   return static::find(array('field' => $matches[1],
     'value' => $args[0]));
 }
}
}
$user = User::findById(123);
$user = User::findByEmail('rasmus@php.net');


Вопросы:
1) Мне хотелось бы добавить этот метод в __callStatic, чтобы она всегда выполнялась при вызове некого статического метода. Как сделать это? Я пробовал добавить это в __callStatic прямо перед return :
...
$this->WhyNotCall();
...

не помогло.

2) Почему static ? Просто впервые вижу такую конструкцию
.....
 return static::find(array('field' => $matches[1],
     'value' => $args[0]));
.....
  • Вопрос задан
  • 2325 просмотров
Решения вопроса 1
@IceJOKER
Web/Android developer
Не совсем понял вопрос.

_callStatic - магический метод, который срабатывает при вызове несуществующего статического метода.
Если вы собирались вызвать не статический метод вызвать в статическом, то это у вас не выйдет, т.к. this не сработает, ибо статический метод не может обратиться к определенному объекту, то есть статичные данные для всех объектов одни и те же
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vshemarov
@vshemarov
Почему static ?

Почитайте про позднее статическое связывание. Если кратко, то self указывает на класс, где определен метод, а static вычисляет класс в момент вызова (с учетом возможных наследований).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы