2010-12-29 15 views
17

Al declarar una matriz como miembro de la clase, ¿de qué manera se debe hacer?PHP5. Dos formas de declarar una matriz como miembro de la clase

class Test1 { 
    private $paths = array(); 

    public function __construct() { 
     // some code here 
    } 
} 

o

class Test2 { 
    private $paths; 

    public function __construct() { 
     $this->paths = array(); 
     // some code here 
    } 
} 

Cuál es mejor en términos de buenas prácticas y el rendimiento? ¿Qué recomendarías?

Respuesta

8

Sugeriría hacer esto al declarar una variable de clase. Un constructor puede ser anulado en la extensión de clases, lo que podría resultar en E_NOTICEs o incluso E_WARNINGs si alguna de sus funciones depende de que esta variable sea una matriz (incluso una vacía)

+1

Sí, ¡esto sí importa! Como dice la documentación de PHP5: 'Los constructores primarios no se invocan implícitamente si la clase hija define un constructor'. – ezpresso

+7

"Sugeriría hacer esto" cuando el OP hace una pregunta sobre "o". Que es esto"? ¿Lo hace en el constructor o como parte de la declaración? – Adam

+0

@ Adam: Estaba claro para el OP lo que significa. Tal vez porque leyó la oración completa. – Mchl

5

Si va a completar su matriz dinámicamente durante la inicialización, hágalo en el constructor. Si contiene valores fijos, hágalo en la declaración de propiedad.

Tratando de rellenar una matriz de forma dinámica (por ejemplo, utilizando el valor de retorno de una cierta función o método) dentro de los resultados de declaración en un error de análisis:

// Function call is not valid here 
private $paths = get_paths(); 

rendimiento no es una preocupación real aquí como cada uno tiene su propio caso de uso.

+0

Gracias! ¿Hay alguna penalización de rendimiento al hacerlo en el constructor? – ezpresso

+0

@ezpresso: No es que yo sepa, no que debería importar. – BoltClock

1

No hay implicaciones de rendimiento. Deje de obsesionarse con las cosas que no importan, concéntrese en los problemas de rendimiento que EXISTEN: primero mida, optimice solo a los principales delincuentes.

5

En general, porque escribo sobre todo en otros idiomas además PHP, me gusta declarar mis variables de instancia fuera del constructor. Esto nos permite ver la parte superior de una clase y obtener una idea para todas las propiedades y sus modificadores de acceso sin tener que leer el código.

Por ejemplo, yo realmente no me gusta métodos como éste

// ... 
// whole bunch of code 
// ... 
public function initialize() { 
    $this->foo = array(); 
    // some other code to add some stuff to foo 
} 

Ahora, si me basta con ver la clase, no puedo estar seguro de que es una variable foo aún disponibles. Si lo hay, no sé si tengo acceso desde cualquier lugar fuera de la instancia.

Si en cambio tengo:

public $foo = array(); 

en la parte superior de mi clase, sé que foo es una propiedad de instancia, y que puedo acceder a él desde otro lugar.

Cuestiones relacionadas