Acerca de los dos símbolos de las series php @ y $ --- que php siempre sabrá

Al escribir código, encontré el problema de @ y $ frente a funciones y variables, así que aproveché esta oportunidad para aprender los dos métodos de php pasando por valor y pasando por referencia.

 

 

Ante todo

 

El operador @ solo es válido para expresiones. Una regla simple para los principiantes es: si puede obtener un valor de algún lugar, puede agregar el operador @ delante de él. Por ejemplo, puede ponerlo antes de variables, funciones e incluir () llamadas, constantes, etc. No se puede colocar antes de la definición de una función o clase, ni se puede usar en estructuras condicionales como if y foreach. 

El prefijo de operador de control de errores "@" actual invalida incluso la notificación de errores de errores graves que provocaron la finalización del script. Esto significa que si usa "@" para suprimir el mensaje de error antes de una llamada de función que no existe o es del tipo incorrecto, el script morirá allí sin ninguna indicación de la causa.

En una palabra, es un medio para suprimir la notificación de errores.

 

 

 

Porque $ es nuestro tema clave

 

Código PHP:
Forma básica:
función & find_var ($ param) // Aquí, & se usa delante del objeto, que actúa como una declaración
{     / * ... código ... * /     return $ found_var; } $ foo = & find_var ($ bar); // Aquí, & se usa para vincular variables $ foo-> x = 2; // Asignar un valor a una función Ejemplo: function & test ()    {    static $ b = 0; // Declarar una variable estática    $ b = $ b + 1;    echo $ b;    return $ b;    }    $ a = test (); // Esta declaración generará el valor de $ b como 1, $ a = 5;    $ a = test ( ); // Esta declaración saldrá El valor de $ b es 2, porque no hay retorno por referencia, $ a = 5, que no asigna valor al objeto $ a = & test (); // Esta sentencia saldrá el valor de $ b como 3, y la referencia exitosa devuelve el siguiente código Funciona $ a = 5;    $ a = test (); // Esta declaración generará el valor de $ b como 6   como se explica a continuación:  En este way, $ a = test (); en realidad no es un retorno de referencia de la función, esto no es diferente de las llamadas a funciones ordinarias. En cuanto a la razón: esta es la regla de PHP,





 
















PHP estipula que $ a = & test (); solo obtiene el retorno de referencia de la función.
En cuanto a lo que es el retorno de referencia (el manual de PHP dice: el retorno de referencia se usa cuando quieres usar una función para encontrar a qué variable debe estar ligada la referencia). 
Esta mierda me hizo fallar en entender durante mucho tiempo.
Usando el ejemplo anterior para explicar que la
función es llamada por $ a = test (), simplemente asignando el valor de la función a $ a, y cualquier cambio en $ a no afectará el $ b en la función. Pase $ a = & test () para llamar a la función, su rol es devolver la dirección de memoria de la variable $ b en el retorno $ b y la dirección de memoria de la variable $ a en el mismo lugar, produciendo un efecto equivalente a esto ($ a = & b;) Entonces, cambiar el valor de $ a también cambia el valor de $ b, así que después de ejecutar: $ a = & test ();
$ a = 5 ;,
el valor de $ b se convierte en 5 ......

php ¿Qué significa el signo comercial delante de la función? Algunas funciones se agregarán con símbolos y símbolos, porque rara vez los veo, por lo que no entiendo el significado de
agregar símbolos frente a funciones php. Entonces, ¿cuál es el efecto de agregar símbolos frente a funciones php?  Función de

código Java 
& test ()   
{   
static $ b = 0; // Declarar una variable estática   
$ b = $ b + 1;   
echo $ b;   
return $ b;   
}   
  
$ a = & test (); // Esta declaración generará el el valor de $ b es 1   
$ a = 6;   
test (); // Esta declaración generará el valor de $ b como 7 
 
más & antes de la variable php


Veamos un ejemplo de


código Php 

 
$ foo = 321;
$ bar = & $ foo; 
$ bar = 123;
print $ foo; Entonces, ¿cuál será el resultado de salida? ¿Por qué el


código Php 
123 es    
  
así?


Cambiar la nueva variable afectará a la variable original y esta operación de asignación es más rápida.
Nota: Solo las variables con nombre se pueden asignar por dirección, es decir, cambiar el valor de $ bar también cambiará el valor de $ foo.
 
Otro ejemplo:

$ _GET [1] = 1;
función & a ()
{  $ a = $ _GET [1];  return $ a; } $ x = & a (); $ x = 'MoontoC'; echo $ _GET [1 ]; // MoontoC se mostrará aquí en lugar del valor inicialmente asignado 1. ¿Entiende el significado? Cuando se usa una función para pasar un valor, ambas partes deben usar el símbolo de referencia para que tenga sentido, de modo que se pueda citar realmente , y cualquier lado es menos Si usa el símbolo de referencia, no obtendrá el contenido incorrecto, pero el contenido se pasa por valor, no por referencia. Es realmente difícil para las personas que no tienen una base de programa comprender la importancia de pasar por valor y pasar por referencia al principio. Sienten que pueden obtener lo que quieren de todos modos, pero no es así. Muchas veces, aunque obtienen lo mismo cosa, el precio es completamente diferente. Se transfiere un valor de hasta 2 millones de palabras como valor, lo que significa que se colocan 4 millones de palabras en la memoria al mismo tiempo, lo que significa que la memoria se duplica, y se pasa por referencia es solo un atajo para transferirlo.





 

 

Explicación 2:

 

 

Simplemente agregue el signo comercial delante de variables, funciones, objetos, etc.


Citar en PHP significa: diferentes nombres acceden al mismo contenido variable, 
es diferente de los punteros en lenguaje C. El puntero en el lenguaje C almacena el contenido de la variable. La dirección almacenada en la memoria.

La referencia de la variable La referencia de 

PHP le permite usar dos variables para apuntar al mismo contenido. 
[Php]  
<? 
$ A = " ABC "; 
$ b = & $ a; 
echo $ a; // salida aquí: ABC 
echo $ b; // salida aquí: ABC 
$ b =" EFG "; 
echo $ a; // aquí el valor de $ a se convierte EFG, así que genera EFG 
echo $ b; // ¿La salida de EFG aquí 
?> 
[/ Php] La 

llamada a la función 
por dirección. No diré mucho al respecto. El código se proporciona directamente debajo de 
[php] 
función de prueba (& $ a) 

$ a = $ a + 100; 

$ b = 1; 
echo $ b; // salida 1 
prueba ($ b); // aquí $ b se pasa a la función es en realidad la dirección de memoria donde está el contenido de la variable de $ b se encuentra, cambiando $ a en la función Puede cambiar el valor de $ b 
echo "<br>"; 
echo $ b; // salida 101 
[/ php] 
Cabe señalar que habrá un error en la prueba (1); el motivo es pensar en la

referencia de la  función devolver 
primero mire el código 
[php] 
function & test () 

static $ b = 0; // Declare a variable estática 
$ b = $ b + 1; 
echo $ b; 
return $ b; 


$ a = test (); // Esta declaración generará el valor de $ b como 1 
$ a = 5; 
$ a = test () ; // this Esta declaración generará el valor de $ b como 2 

$ a = & test (); // Esta declaración generará el valor de $ b como 3 
$ a = 5; 
$ a = test (); // This La declaración generará $ El valor de b es 6 
[/ php] 
Lo siguiente explica:  
De esta manera $ a = test (); Lo que obtienes en realidad no es un retorno de referencia de una función, que no es diferente de las llamadas a funciones ordinarias. En cuanto a la razón: Esta es la estipulación de 
PHP Se estipula que lo que se obtiene por el método de $ a = & test (); es el retorno de referencia de la función. 
En cuanto a cuál es el retorno de referencia (el manual de PHP dice: el retorno de referencia se usa cuando quieres usar una función para encontrar a qué variable debe estar vinculada la referencia.) No entendí esta mierda durante mucho tiempo. 

Usar el ejemplo anterior para explicar es 
llamar a la función de la manera de $ a = test (), simplemente asigne el valor de la función a $ a, y cualquier cambio en $ a no afectará a To $ b en la función 
Y al llamar a la función mediante $ a = & test (), su función es apuntar la dirección de memoria de la variable $ b a cambio $ b al mismo lugar
que la dirección de memoria de la variable $ a, lo  que produce un efecto equivalente a this ($ a = & b;) Entonces, cambiar el valor de $ a también cambia el valor de $ b. Entonces, después de ejecutar 
$ a = & test (); 
$ a = 5;, 
el valor de $ b ha cambiado a 5 

aquí para todos Use variables estáticas solo cuando comprenda el retorno de referencia de una función. De hecho, el retorno de referencia de una función se usa principalmente en la

referencia de  objeto 
[php] 
<? 
class a { 
var $ abc = "ABC"; 

$ b = new a; 
$ c = $ b; 
echo $ b-> abc; // aquí salida ABC 
echo $ c-> abc; // aquí salida ABC 
$ b-> abc = "DEF"; 
echo $ c-> abc ; // aquí salida DEF 
?> 
[/ php] El
código anterior se ejecuta 
en PHP  5. La copia de objetos en PHP5 se realiza por referencia. En la columna anterior, $ b = new a; $ c = $ b; en realidad es equivalente a $ b = new a; $ c = & $ b; El 
valor predeterminado en PHP5 es llamar a los objetos por referencia, pero a veces es posible que desee para crear un objeto Se espera que los cambios en el objeto original no afecten la copia, para ello PHP define un método especial llamado __clone. 


Si el programa es relativamente grande, hay muchas variables que hacen referencia al mismo objeto y desea borrarlo manualmente después de usar el objeto, personalmente recomiendo usar el método "&" y luego usar el método $ var = null para Otras veces, use el php5 predeterminado Además, para la transmisión de arreglos grandes en php5, se recomienda usar el método "&", que ahorra espacio en la memoria después de todo. 


Desreferencia
Cuando desarma  la referencia, simplemente rompa el vínculo entre el nombre de la variable y el contenido de la variable. Esto no significa que se destruya el contenido variable. Por ejemplo:  

<? Php 
$ a = 1; 
$ b = & $ a; 
unset ($ a); 
?>   

No desarmará $ b, solo $ a.  


Referencias globales
Cuando una variable se declara con $ var global, se establece realmente una referencia  a la variable global. En otras palabras, es lo mismo que hacer esto:  

<? Php 
$ var = & $ GLOBALS ["var"]; 
?>   

Esto significa que, por ejemplo, unset $ var no anulará las variables globales.  

$ this 
En un método de objeto en, $ this siempre es una llamada a su objeto. 


// Después de otro episodio 
. La función de apuntar a la dirección (similar a un puntero) en PHP no es implementada por el usuario, pero implementada por el núcleo Zend. La referencia en PHP usa el principio de "copiar al escribir", que es decir, a menos que suceda. Para operaciones de escritura, las variables u objetos que apuntan a la misma dirección no se copiarán. 

Charla popular 
1: 

$ a = "ABC"; 
$ b = $ a; 
[/ php] 
De hecho, tanto $ a como $ b apuntan a la misma dirección de memoria en este momento en lugar de que $ ay $ b ocupen una memoria diferente 

2: Si en el código anterior Sobre la base, agregue el siguiente código 
[php]  
$ a = "EFG"; 
[/ php] 
Dado que los datos en la memoria apuntados por $ ay $ b deben escribirse nuevamente, el núcleo Zend determinará automáticamente que es automáticamente $ b Producir una copia de datos de $ ay volver a solicitar una pieza de memoria para almacenamiento 

Supongo que te gusta

Origin blog.csdn.net/ld17822307870/article/details/113012402
Recomendado
Clasificación