http://php.net/manual/en/function.call-user-func.php
В разделе «Журнал изменений» говорится:
"The interpretation of object oriented keywords like parent and self has changed. Previously, calling them using the double colon syntax would emit an E_STRICT warning because they were interpreted as static."
Это для PHP5.3+. Я никогда не видел необходимости и в ->, и в ::. Почему мы не можем просто полагаться на определение метода и использовать Class->foo() или $Obj->bar(), это правильная функция.
Он просто говорит, что до 5.3 вызов чего-то вроде parent::foo() с call_user_func() вызывал предупреждение, потому что оператор разрешения области видимости :: интерпретировался как статический.
@ code-kobold - Всегда можно предположить, что целевой метод нестатичен (почему / как?)? И вызов нестатического метода статически генерирует предупреждение до php 5.3 (я имею в виду, это то, о чем идет речь)?
Вы спрашиваете, было ли это поведение другим в php 5.x; в отличие от php 7? В частности, в php <5.3?
@yivi - Я знаю, что это не относится к PHP 7. Это можно рассматривать как «ошибку прошлого», но я хочу понять это. Я изучаю PHP.
Хорошо, но вы спрашиваете о 5.x, но я предполагаю, что вас особенно беспокоит php <5.3, верно?
@yivi - Нет, совсем нет. Любая версия, к которой это относится. Я просто хочу понять этот текст (и двигаться дальше). Я буду использовать PHP 7, когда начну писать код.
Возможный дубликат call_user_func () - "parent ::", "self ::" - предупреждение E_STRICT - интерпретируется как статическое






Меня это тоже всегда беспокоило. Для меня использование
::подразумевает, что это должен быть статический метод или переменная. Итак, я стараюсь просто усилить этот правило в моем собственном коде, не запутывая его. Но в более сложных объектах ... это становится рискованно.