Cuando intento anular la variable de clase de la misma manera que anula el método de clase en PHP. Me gusta:Reemplazo de variable de PHP
class DataMapper {
protected $_name = null;
public function printName() {
echo $this->_name;
}
}
class Model extends DataMapper {
protected $_name = 'Ana';
}
$test = new Model();
$test->printName();
Se imprime 'Ana'.
¿Por qué PHP puede hacer una cosa así? Rompe la ley del paradigma orientado a objetos
No creo que el comportamiento del idioma sea ilegal en ninguna jurisdicción. Las variables en realidad no necesitan ser sombreadas. Y en PHP los objetos son simplemente diccionarios también. Solo redeclara el valor predeterminado aquí. – mario
Esas no son variables de clase (es decir, 'estáticas'), son variables de objeto/instancia. Como explican las personas, así es como se supone que la herencia funciona con los miembros protegidos. Si en cambio establecieras una variable de clase privada (es decir 'private static $ myVar = 'Ana';') entonces no se definiría en ninguna clase secundaria. – joelhardi
Según entiendo, tienes razón. Normalmente no puede anular las variables. Y aquí no estás realmente haciendo eso, simplemente estás redeclarando una variable, y el original está perdido. Creo, de todos modos. Creo que PHP es un poco más flexible en sus estándares y le permite salirse con operaciones/sintaxis cuestionables. – Jonathon