2011-08-11 13 views
6

Desde mi C++ base de conocimientos, tiendo a inicializar matrices en PHP escribiendo:
$foo = array()
O puedo llevar esta costumbre de Javascript, de todos modos, es esto de alguna utilidad?
Como no hay problema al hacer esto:
$foo[45] = 'bar' sin inicializando como una matriz, supongo que no.¿Está llamando a array() sin argumentos de ningún uso?

PS: la mejora etiquetas es muy bueno

+1

Es bueno inicializar explícitamente las matrices, y es una manera rápida de vaciar una matriz. –

+0

¿Qué hay de las ventajas de rendimiento al definirlo con 'array()' primero? –

+0

@dotweb: No esperaría ninguna ventaja de rendimiento de eso (tal vez incluso una disminución (insignificante) en el rendimiento, si se crea una matriz, pero nunca se utiliza). – Mchl

Respuesta

6

Sí lo es. Por lo menos en la mejora la legibilidad del código (de modo que no es necesario que preguntarse '¿dónde $foo viene? ¿Está vacía, o hay algo en ella? `.

También se evitará que 'Variable '$a' is not set avisos, o Invalid argument passed to foreach en caso de que no asigne ningún valor a los elementos de la matriz

+0

+1 cuando veo algo como '$ foo [45] = 'bar'', lo primero que pienso es" ¿dónde se inicializó '$ foo' y qué es exactamente?" –

1

Cualquiera de los métodos es perfectamente aceptable. Como se mencionó, esta práctica de usar el constructo array() generalmente se realiza desde otro idioma donde se inicializa antes de poblar. Con PHP, puede inicializar una matriz vacía y luego completarla más tarde, o simplemente puede establecer una matriz por asignaciones, como $variableName[0] = "x";.

1

@ petruz, esa es la mejor manera de hacerlo, no solo le salvará de desagradables mensajes de error de PHP diciendo que la función espera que el parámetro sea una matriz, pero, en mi humilde opinión, esta es la mejor manera de escribir código. Inicializo una variable antes de usarla

1

La inicialización de las variables antes del uso es una buena práctica. Incluso si no es requerido.

1

He tenido problemas (en versiones anteriores de PHP, no lo he intentado recientemente) donde actuaba en la matriz con array_push o algo y PHP me ladró. Como regla general, no es necesario, pero puede ser más seguro, especialmente si se trata de un código heredado: tal vez espere que $ foo sea una matriz, ¿pero en realidad es un booleano? sigue.

1

Con la inicialización:

$myArray = array(); 
if ($myBoolean) { 
    $myArray['foo'] = 'bar'; 
} 
return $myArray; 

Sin inicialización:

if ($myBoolean) { 
    $myArray['foo'] = 'bar'; 
} 
return $myArray; 

En el primer caso, está claro lo que desea que suceda si $ myBoolean es falsa. En el segundo caso, no lo es y php puede emitir una advertencia cuando intente utilizar $ myArray más adelante. Obviamente, este es un caso simplificado, pero en un caso complejo, el "si" puede estar a unas pocas líneas hacia abajo y/o no existir hasta que alguien aparezca y lo agregue más tarde sin darse cuenta de que la matriz no se ha inicializado.

Aunque no es necesario, he visto que la falta de inicialización causa problemas lógicos no obvios como este en funciones complejas que se han modificado mucho con el tiempo.

1

Es una buena práctica.Tarde o temprano se encontrará con una situación en la que es posible que desee hacer algo como esto:

array_push($foo, '45'); 

Qué va a lanzar un aviso, mientras que:

$foo = array(); 
array_push($foo, '45'); 

no lo hará.

+0

Correcto, me encontré con algunas funciones array_ y foreach. Pero supongo que si PHP es un lenguaje tan laxo, también podría considerar nulo como una matriz vacía y, de todos modos, presionar el elemento. – Petruza

Cuestiones relacionadas