2011-06-18 21 views
19

Aunque entiendo que la variable $this no está disponible cuando se llama a un método en un contexto estático, para ayudar a desacoplar los componentes de mi aplicación de uno a otro, pensé que tendría sentido llamar a métodos estáticos desde una instancia. Por ejemplo:¿Llamar método estático de instancia en PHP, desaprobación futuro?

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'); 

¿Hay planes para despreciar este tipo de funcionalidad, o soy yo derecho a esperar apoyo a esta de cara al futuro? Trabajo con error_reporting(-1) para asegurar un entorno de desarrollo muy estricto, y no hay ningún problema hasta el momento (PHP 5.3.6); sin embargo, soy consciente de que el reverso no se admite; es decir, los métodos de instancia se llaman estáticamente.

+0

'$ example :: method()' buscará una clase con el nombre '$ example' evaluado, por lo que no creo que funcione (* salvo trucos con '__toString()' *) .. . ** o no? ** No esperaba que eso funcionara, sin embargo parece que sí. Sin embargo, tengo curiosidad, sintácticamente (y técnicamente) si esa es la mejor dirección. – Dan

+0

bueno, espero que no vaya a ser obsoleto pronto ... va a romper un montón de código, ¡ja! – prodigitalson

Respuesta

27

Desde el Php documentation:

una propiedad declarada como estática no se puede acceder con un objeto de clase instanciado (aunque un método estático puede).

Así que creo que será compatible con versiones anteriores durante mucho tiempo.

+2

A partir de 2016, ["Para el registro, actualmente no hay planes, ni específicos ni especulativos, para desaprobar esta funcionalidad."] (Https://www.reddit.com/r/PHP/comments/3yph4q/is_it_bad_practice_to_call_a_static_method_via_an/ cyg3fct /) – bishop

Cuestiones relacionadas