2011-06-04 24 views
6

que pasa a leer este http://code.google.com/speed/articles/optimizing-php.html¿Qué hace el operador de asignación de PHP?

Se afirma que este código

$description = strip_tags($_POST['description']); 
echo $description; 

debe ser optimizado de la siguiente manera

echo strip_tags($_POST['description']); 

Sin embargo, en mi entender, operación de asignación en PHP no es necesariamente crear una copia en la memoria.

Esto sólo tiene una copia de "ABC" en la memoria.

$a = $b = "abc"; 

Consume más memoria solo cuando se cambia una variable.

$a = $b = "abc"; 
$a = "xyz"; 

¿Es correcto?

+0

En el primer fragmento de código, no se hace referencia a '$ description' más adelante? ¿Eso no implica que la cuerda se esté almacenando en la memoria? El segundo fragmento, sin embargo, no se puede referenciar de nuevo. Tendría que volver a evaluar la función una vez más para obtener el mismo resultado. – Blender

Respuesta

5

deberían optimizarse como a continuación

Es sólo una buena idea si no es necesario almacenarlo, evitando así el consumo innecesario de memoria. Sin embargo, si necesita generar el mismo resultado nuevamente más tarde, es mejor almacenarlo en una variable para evitar otra llamada a la función.

¿Es eso correcto?

Sí. Se llama copy-on-write.

+0

+1, ¡me ganas por minuto! –

+0

¿Realmente tiene "consumo innecesario de memoria"? Quiero decir, si $ _POST ['description'] es 512K, ¿el primer código de bloque consume memoria doble? Supongo que se necesita la misma memoria, solo que la memoria no se liberaría antes de que termine el guión. –

+1

@Morgan Cheng: '$ _POST [ 'description']' y '$ description' son diferentes, porque' $ description' es una copia de '$ _POST [ 'description']' para el que se aplica una modificación ('strip_tags') Entonces sí, se necesita más memoria que solo hacer referencia a la variable POST.Además, la memoria no se libera necesariamente en el script final, se libera cuando la variable sale del alcance. – netcoder

1

En el primer ejemplo, si la variable sólo se utiliza una vez entonces no hay punto de hacer que una variable en el primer lugar, sólo se hacen eco de las declaraciones de resultado correcto de distancia, no hay necesidad de que la variable.

En el segundo ejemplo, PHP tiene algo que se llama copiar al escribir. Eso significa que si tiene dos variables que apuntan a lo mismo, ambas apuntan al mismo bit de memoria. Eso es hasta que se escribe una de las variables, luego se realiza una copia y el cambio se realiza en esa copia.

1

El autor tiene un punto en cuanto a copiar datos en una variable mantener esos datos en la memoria hasta que la variable sea unset. Si no necesita los datos más tarde, en realidad se trata de una memoria desperdiciada.

De lo contrario, no hay ninguna diferencia en pico consumo de memoria entre los dos métodos, por lo que su razonamiento ("copia") es incorrecto.

+0

Bueno, las variables se desarmarán automáticamente cuando salgan del alcance. Lo que mencionas es cierto en la programación de procedimientos, pero no es realmente una preocupación en una aplicación OO estructurada adecuadamente. – netcoder

+0

@netcoder Concedido, claro. Pero si va a generar muchos más datos en el mismo ámbito, puede marcar la diferencia entre un script en ejecución y un script de terminación. :) – deceze

Cuestiones relacionadas