Эй, гуру php. Я сталкиваюсь с некоторыми странными проблемами с классом, которые явно связаны с некоторой причудой в php. Может кто-нибудь сказать мне, что из-оф-неординарных ситуациях может дать следующее сообщение об ошибке ...PHP5 класс причуды
Фатальная ошибка: Не удается получить доступ к себя :: когда ни один класс не сфера активен в MyClass.php в строке 5
Теперь, очевидно, если бы я использовал self :: вне класса, я бы получил ошибки ... но я не уверен. Вот упрощенная версия ситуации ...
//file1
class MyClass{
public static function search($args=array()){
$results = MyDbObject::getQueryResults("some query");
$ordered_results = self::stack($results); //Error occurs here
return $ordered_results;
}
public static function stack($args){
//Sort the results
return $ordered_results;
}
}
//file 2
include_once("MyClass.php");
$args = array('search_term'=>"Jimmy Hoffa");
$results = MyClass::search($args);
с учетом этой настройки, как я могу получить ошибку выше? Вот что я нашел до сих пор ...
MyClass::search($args) //does not give the error (usually)
call_user_func("MyClass::search"); // this gives the error!
Любые другие ситуации?
Другая ситуация, когда проблема возникает, когда у вас есть функция внутри функции класса. Но я не понимаю, почему это должно быть проблемой, потому что внутренняя функция все еще должна быть в рамках класса, не так ли? Очевидно, что внутренняя функция не будет доступна вне закрывающей функции. Однако кажется, что вы должны использовать self внутри внутренней функции. – Brooks
Что произойдет, если вы измените «self ::» на «MyClass ::»? – thetaiko
, тогда он работает, но код становится значительно менее многоразовым. – Brooks