2011-06-18 2 views
19

Хотя я понимаю, что переменная $this недоступна, когда метод вызывается в статическом контексте, чтобы помочь развязать компоненты приложения из одного другого, я понял, что имеет смысл вызвать статические методы из экземпляра. Например:Вызов статического метода из экземпляра в PHP, будущая усталость?

class MyExample{ 
    private static $_data = array(); 
    public static function setData($key, $value){ 
     self::$_data[$key] = $value; 
    } 
    // other non-static methods, using self::$_data 
} 

// to decouple, another class or something has been passed an instance of MyExample 
// rather than calling MyExample::setData() explicitly 
// however, this data is now accessible by other instances 
$example->setData('some', 'data'); 

Есть ли планы принизить такого рода функциональность, или я вправе ожидать поддержки этого идти вперед? Я работаю с error_reporting(-1), чтобы обеспечить очень строгую среду разработки, и пока нет никаких проблем (PHP 5.3.6), однако я знаю, что обратное становится неподдерживаемым; то есть методы экземпляра называются статически.

+0

'$ example :: method()' будет искать класс с именем '$ example', поэтому я не верю, что это сработает (* запрет обхода с' __toString() '*) .. . ** или нет? ** Я не ожидал, что это сработает, как бы то ни было. Мне любопытно, хотя, синтаксически (и технически), если это лучшее направление. – Dan

+0

ну, я надеюсь, что это не будет устаревшим в ближайшее время ... его собираются сломать много кода, ха! – prodigitalson

ответ

27

От Php documentation:

Свойство объявлен как статический не могут быть доступны с реализованным класса объекта (хотя статический метод может).

Поэтому я думаю, что он будет поддерживаться в течение длительного времени.

+2

Начиная с 2016 года [«Для записи в настоящее время нет планов, ни конкретных, ни спекулятивных, чтобы обесценить эту функциональность».] (Https://www.reddit.com/r/PHP/comments/3yph4q/is_it_bad_practice_to_call_a_static_method_via_an/ cyg3fct /) – bishop