operator php

php operator



Operador PHP “&” (7)

Asignar esa variable como referencia lo hace de modo que si más adelante se cambia $ db_host, la entrada correspondiente en la matriz $ db_hosts también cambiará, y viceversa.

He visto un poco de uso bastante inútil de referencias en PHP, estilo de culto de carga. Quizás sea necesario, quizás no, tendrías que mirar el resto del programa.

No soy un programador de PHP (pero conozco otros idiomas), y estoy tratando de entender una página web que se hizo en PHP (5.1.6) para hacer algunos cambios.

La página tiene el siguiente código (simplificado):

$db_hosts = array(); $sql = ''SELECT h.hostid, h.host FROM hosts h ''; $db_items = DBselect($sql); while($db_item = DBfetch($db_items)){ $name = $db_item[''host'']; $db_host = &$db_hosts[$db_item[''hostid'']]; }

Estoy tratando de entender la última línea, $db_host = &$db_hosts[$db_item[''hostid'']]; .

Parece estar creando una nueva variable, $db_host , y poniendo algo dentro de ella, pero no entiendo &$db_hosts .

Tengo dudas porque, por lo que sé, $db_hosts es una matriz vacía.

Encontré this y this , pero no estoy muy seguro, porque en estos enlaces, el operador es "= &", y en el código, el operador se adjunta a la variable "= & $ db_hosts" (tiene un espacio entre = y &).

Desde que intenté modificarlo y no tuve éxito, pensé que era mejor pedir ayuda ...




Esas son referencias, y son similares a los "punteros" en C o C ++.

Más información está en el manual de PHP .

En este caso, dado que $db_hosts está vacío, la construcción $db_hosts[$db_item[''hostid'']] creará una nueva matriz con un elemento vacío en el índice de $db_item[''hostid''] y devolverá la referencia del elemento, $db_host actúa como un ''alias'' para lo que sea $db_hosts[$db_item[''hostid'']] actualmente.


& se usa de diversas maneras en PHP para denotar referencias ( consulte esta sección del manual ), pero es engañoso pensar que es un operador por derecho propio. Esta es la razón por la que algunas personas prefieren escribir $foo =& $bar lugar de $foo = &$bar . Significa lo mismo, pero enfatiza que la "referencia-y-ness" es una propiedad de la tarea, no de la variables

En algunos lenguajes de programación, como C o C ++, puede "obtener una referencia a" una variable en particular; el valor resultante se puede pasar como una entidad distinta, y luego se "quita la referencia" para averiguar dónde apunta. Esto no es lo que son las referencias de PHP.

En cambio, todas las variables de PHP son en realidad referencias a un tipo interno llamado zval . No puede manipular directamente los zval s en PHP, ni tampoco puede crear capas adicionales de zval indirecto: cada variable es una referencia a un zval , y eso es todo. (Ver advertencia: objetos abajo).

Qué es una asignación por referencia ( $foo =& $bar ), un paso por referencia ( function foo(&$bar) { ... } ), o un retorno por referencia ( return &$foo ) hacer es decirle a PHP que desea que dos variables apunten al mismo zval . Tenga en cuenta que no está apuntando una variable "a" otra; ambas son igualmente "reales", y llamar a unset() en cualquiera de las dos dejará la otra completamente intacta.

Advertencia: objetos

A menudo se dice erróneamente que, dado que los objetos PHP5 "siempre se pasan por referencia". La verdad es que tienen una capa adicional de indirección, donde el zval es en sí mismo un puntero a un objeto en particular. Esto nos da tres cosas diferentes a las que podemos referirnos: la variable , el zval que apunta y el objeto que apunta a:

// Create an object, and point three variables at it in different ways: $foo = new stdClass; $bar_by_value = $foo; $bar_by_ref =& $foo; // Change the object: updates the object shared by all three variables $foo->value = 42; // Change the value (zval) of $foo: will update $bar_by_ref, // but $bar_by_value still points at the original object $foo = 42; // Change the variable itself: will never affect $bar_by_value or $bar_by_ref unset($foo);


& se utiliza como referencia. Vea qué referencias se encuentran en http://php.net/manual/en/language.references.php :

Las referencias en PHP son un medio para acceder al mismo contenido variable con diferentes nombres. No son como punteros C; por ejemplo, no puede realizar aritmética de punteros con ellos, no son direcciones de memoria reales, etc.


Pregunta :

¿Qué significa "&" aquí en PHP?

Operador PHP "&"

Hace la vida más fácil una vez que nos acostumbramos a ella (ver el ejemplo a continuación con cuidado)

Y usualmente los bits de verificación que están establecidos tanto en $ a como en $ b están establecidos.

¿Te has dado cuenta de cómo funcionan estas llamadas?

error_reporting(E_ERROR | E_WARNING | E_PARSE); error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); error_reporting(E_ALL & ~E_NOTICE); error_reporting(E_ALL);

Así que detrás de todo lo anterior está el juego de bit a bit operador y bit

Un caso útil de estos son las configuraciones fáciles, como las que aparecen a continuación, por lo que un solo campo entero puede almacenar miles de combos para usted.

La mayoría de las personas ya han leído los documentos, pero no han confiado el caso de uso en el mundo real de estos operadores de bitwise.

Ejemplo que puede ser muy útil la vida cotidiana de PHP.

<?php class Config { // our constants must be 1,2,4,8,16,32,64 ....so on const TYPE_CAT=1; const TYPE_DOG=2; const TYPE_LION=4; const TYPE_RAT=8; const TYPE_BIRD=16; const TYPE_ALL=31; private $config; public function __construct($config){ $this->config=$config; if($this->is(Config::TYPE_CAT)){ echo ''cat ''; } if($this->is(Config::TYPE_DOG)){ echo ''dog ''; } if($this->is(Config::TYPE_RAT)){ echo ''rat ''; } if($this->is(Config::TYPE_LION)){ echo ''lion ''; } if($this->is(Config::TYPE_BIRD)){ echo ''bird ''; } echo "/n"; } private function is($value){ return $this->config & $value; } } new Config(Config::TYPE_ALL); // cat dog rat lion bird new Config(Config::TYPE_BIRD); //bird new Config(Config::TYPE_BIRD | Config::TYPE_DOG); //dog bird new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT); //rat lion bird