2012-03-16 12 views
6

Me he estado preguntando si una propiedad de clase se crea una instancia y se usa solo en un método de clase si es una propiedad de clase o si solo se trata de una variable local accesible solo para ese método de clase.¿Debo mantener las variables utilizadas solo en un método de clase local o declararlas como propiedades de clase?

Por ejemplo, ¿Debo mantener una variable sólo se utiliza en un método como una variable local como esto:

class myClass 
{ 
    public function myMethod() 
    { 
     $_myVariableUsedOnlyOnce = "Hello World"; 
     echo $_myVariableUsedOnlyOnce; 
    } 
} 

o debería hacer que la variable de una propiedad de clase privada de esta manera:

class myClass 
{ 
    private $_myVariableUsedOnlyOnce; 

    public function myMethod() 
    { 
     $this->_myVariableUsedOnlyOnce = "Hello World"; 
     echo $this->_myVariableUsedOnlyOnce; 
    } 
} 

¿Qué enfoque "huele"? ¿Cuáles son los beneficios de hacer que todas las propiedades de clase de variables de método no sean cuando necesito imprimir_r() todo el objeto para depuración?

Gracias

+1

Si está seguro de que solo se utilizará una vez, hágalo de forma local. De lo contrario, tienes razón para hacerlo privado. _A menos que necesite el valor de esa variable para persistir entre las llamadas de ese método, en el que al menos tendría que ser 'estático' en el método. –

Respuesta

4

Si necesita que tenga persistencia en todas las llamadas a funciones, una propiedad de clase sería mejor para que se mueva como lo hace el objeto. También es posible que desee utilizarlo por otras razones en el futuro en otras funciones. Sin embargo, agrega sobrecarga.

En general, la clase debe tener un análogo del mundo real, por lo que si su variable corresponde a algo que tenga sentido, p. una clase de persona tiene una altura $, entonces pertenece como una propiedad de clase. De lo contrario, si es solo una parte de los cálculos internos de un método, entonces realmente no pertenece a la clase, p. una persona no tiene un $ shoelaceIterator o lo que sea.

Argumentaría que un diseño de objeto confuso sería más un olor que una sobrecarga de memoria potencialmente pequeña (aunque esto depende de cuán grande sea la variable).

0

En primer lugar me preguntaban si realmente necesita la variable/propiedad en absoluto si usted está utilizando solamente una vez. En cuanto a cuál "huele", una propiedad se almacena en la memoria durante toda la vida del objeto, mientras que la variable está solo en la memoria hasta que el método termina de ejecutarse.

+0

Obviamente, ese fue solo un ejemplo simple y estaría haciendo más cosas con la variable en el método que simplemente repetir "Hello World". Pero gracias, veo el beneficio en términos de asignación de memoria. – Tom

+0

No es solo asignación de memoria, ya que "zedat" ha señalado también su velocidad. – nathanjosiah

0

Si no necesita una variable fuera del método, no debe ser una propiedad de la clase. Además, acceder a las variables locales es más rápido.

0

En un enfoque de diseño puro, le sugiero que haga su elección de acuerdo con lo que se supone que el atributo/propiedad debe modelar.

En términos de rendimiento puro, tener un atributo estático es mejor porque el espacio de memoria no se asignará con cada instancia de la clase.

1

Estas variables locales no son propiedades de su objeto.

No están definiendo su objeto, entonces no deberían declararse como miembro privado.

Cuestiones relacionadas