2009-07-06 26 views
39

Soy nuevo en el paradigma OOP, por lo que probablemente haya una explicación simple para esta pregunta ...¿Cuándo debería declarar las variables en una clase de PHP?

¿Siempre tiene que declarar variables públicas para todo el objeto en una clase? Por ejemplo:

<?php 

class TestClass 
{ 
    var $declaredVar; 

    function __construct() 
    { 
     $this->declaredVar = "I am a declared variable."; 
     $this->undeclaredVar = "I wasn't declared, but I still work."; 
    } 

    function display() 
    { 
     echo $this->declaredVar . "<br />"; 
     echo $this->undeclaredVar; 
     echo "<br /><br />"; 
    } 
} 

$test = new TestClass; 
$test->display(); 

$test->declaredVar = "The declared variable was changed."; 
$test->undeclaredVar = "The undeclared variable was changed."; 

$test->display(); 

?> 

En este código, a pesar de que $declaredVar es la única variable declarada, $undeclaredVar es tan accesible y utilizable - que parece actuar como si hubiera declarado como público.

Si las variables de clase no declaradas son siempre accesibles de esa manera, ¿de qué sirve declararlas todas por adelantado?

Respuesta

35

esa variable no está inicializada, es simplemente no declarado.

Declarar variables en una definición de clase es un punto de estilo para la legibilidad. Además, puede establecer la accesibilidad (privada o pública).

De todos modos, declarar variables explícitamente no tiene nada que ver con OOP, es específico del lenguaje de programación. En Java no puede hacer eso porque las variables deben declararse explícitamente.

+2

Entonces, es solo porque PHP está perdonando que las variables no declaradas funcionen, ¿verdad? – Andrew

+1

Derecha. Sin embargo, PHP debería emitir una advertencia ... place error_reporting (E_ALL); en la parte superior de tu archivo. – Stephan202

+0

no tan indulgente como ser interpretado –

1

El paradigma general de encapsulación de OOP dice que no debe exponer las variables de estado internas, lo que significa que deben ser privadas, que le permiten cambiar una implementación de su clase sin necesidad de cambiar el código donde la usa. Es una mejor práctica inicializar variables a través del método de constructores y getters y setters de la clase.

13

Si se declara un miembro dentro de la clase puede configurar su accesibilidad por ejemplo

private $varname; 
+5

Nota: Esto sólo ha sido apoyado desde PHP 5 (sólo en caso de que usted está atascado en el árbol 4.x), pero me acuerdo que establecer explícitamente variables y método de la visibilidad es buena práctica - sólo porque el PHP El intérprete no lo requiere, no significa que no deba usarlo. –

0

En general, las variables deben inicializarse tan pronto como tenga suficiente información para hacerlo correctamente.

Si una variable de clase necesita cierta información para inicializarse con sensatez, esa información debe pasarse al constructor.

Usar la sintaxis de PHP para declarar implícitamente variables en el punto de definición es, en mi humilde opinión, una forma segura de introducir errores, si su clase necesita una variable, declararla y utilizar toda la información oculta que OOP le ofrece.

9

Siempre debe declarar sus variables miembro y especificar su accesibilidad dentro de sus clases. Me gusta poner esta información al final de la clase después de mis funciones.

Debe definirlos tan pronto como tenga suficiente información para hacerlo. Posiblemente en el constructor o a través de funciones del colocador.

Es importante hacer esto porque hace la vida mucho más fácil para las personas que trabajan con su código. No tienen que adivinar de dónde vienen las diferentes propiedades o por qué están allí. Además, la mayoría (si no todos) los IDEs no reconocerán las variables de clase a menos que los hayas declarado en alguna parte. La finalización/sugerencias de código son uno de los muchos beneficios de los IDE y sin declarar sus variables, hará que esa funcionalidad sea inútil.

+0

"Deberías definirlos tan pronto como tengas suficiente información para hacerlo". ¿Importa si esto está antes del constructor o en el constructor o en una fase de establecimiento? – tehlivi

0

Como dijo Federico Culloca "Esa variable no está inicializada, simplemente no está declarada". Además, no definió ningún modificador de acceso para que se comporte como un modificador público aplicado a ellos.

Es posible que ya lo haya sabido. PHP es un lenguaje poco tipado.Pero un programador siempre debe seguir las mejores prácticas (pero no utilizar tipos de datos primitivos en php).

Debe utilizar el modificador privada para las variables de nivel de clase y proporcionar métodos de acceso y mutantes (captadores y definidores) para ellos.

Cuestiones relacionadas