note 43348 deleted from language.references.return by betz
| From: | betz@php.net | Date: | Fri, 18 Jun 2004 07:07:55 +0000 |
| Subject: | note 43348 deleted from language.references.return by betz | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-71280@lists.php.net to get a copy of this message | ||
Note Submitter: wmanochio@bol.com.br
----
Any good soul can translate this note to english?
if ($answer == 'yes') { echo 'THANX A LOT!' }
Complementando o que foi dito por "i at tc dot se" e talvez até a documentação (se já
não foi dito em algum lugar que eu não vi):
Se uma chave inexistente de um array for retornada por referência, esta chave será definida com
valor NULL e a referência ao valor da chave será feita.
Trocando palavras por códigos:
<?php
$somearray = array('bla', 'dhu');
print_r($somearray);
/* prints
Array
(
[0] => bla
[1] => dhu
)
*/
$value_of_a_inexistent_key = $somearray[9];
print_r($somearray);
/* prints
Array
(
[0] => bla
[1] => dhu
)
* nada no array foi alterado
* $value_of_a_inexistent_key === NULL
* PHP Notice: Undefined offset: 9 in __FILE__ on line __LINE__
*/
$reference_of_a_inexistent_key = &$somearray[9];
print_r($somearray);
/* prints
Array
(
[0] => bla
[1] => dhu
[9] =>
)
* o array foi alterrado!
* $somearray[9] === null
* $reference_of_a_inexistent_key === &$somearray[9], ou seja,
* a variável, de fato, 'aponta' para a recém criada chave do array e, por isso, também
tem valor NULL. A prova de que a variável é uma referência para o valor da chave do array está
no código abaixo.
*/
$reference_of_a_inexistent_key = 'some value';
print_r($somearray);
/* prints
Array
(
[0] => bla
[1] => dhu
[9] => some value
)
*/
?>
LEMBRE-SE de que uma chamada unset($reference_of_a_inexistent_key) não "apagará" a chave
do array nem destruirá o seu valor, somente a variável '$refer...' sumirá do mapa.
Note ainda que este comportamento não acontece somente para chaves numéricas, e sim para qualquer
tipo de chave de array válida (string, boolean, ...) e ainda para colchetes vazios '[]'.
No caso de '[]', a chave criada segue o mesmo padrão de criação de quando utilizada
esta sintaxe para atribuição, assim sendo, e partindo de:
$somearray = array('bla', 'dhu');
uma declaração do tipo (agora dando um nome mais viável para a variável):
$reference_to_new_key = &somearray[];
fará com que a chave numérica '3' seja adicionada ao array e também fará a variável
'apontar' para a chave '3' do array, portanto, referenciando o seu valor.
Este comportamente foi observado na versão 4.3.7 (atual nesta data) do PHP.
Espero que esta nota ajude a compreender melhor a referência a 'partes' dos array e
também que salve algum tempo quando algum comportamento bizarro =P aparecer no seu código.