O básico de PHP - Parte 14 Introdução Esta é parte de minha série 14, Noções básicas de PHP. Em PHP referências são um meio para acessar o mesmo conteúdo variável (valor) com nomes diferentes. Valores (conteúdo variável) são mantidos em posições de memória. Uma variável identifica uma posição de memória. Uma referência é geralmente usado quando você está mais interessado no que está em um local de memória e não a variável. Referência PHP é diferente de referência em outras linguagens de computador.
Enquanto você lê este artigo, evite fazer comparação com o que você lê ou o que existe em outras linguagens de computador, como C, como que podem confundi-lo. Eu tenho feito o meu melhor para colocar isso de forma progressiva lógico, assim que tomar as coisas como eu te dou. Nota: Se você não pode ver o código ou se você acha que alguma coisa está faltando (link quebrado, imagem ausente), apenas contacte-me em [email protected]. Ou seja, contacte-me para o menor problema que você tem sobre o que você está lendo.
Memória Local A localização de memória é uma área na memória do computador que contém o valor de uma variável. Uma técnica de trabalhar com um local de memória Considere a seguinte declaração: $ var = 5; O valor de 5 é de uma posição de memória. Você pode usar este mesmo local de memória para aumentar o valor de 5-8, adicionando 3. Você faria isso: $ var = $ var + 3; O que acontece é o seguinte: O computador sabe que $ var identifica a localização de memória que tem o número 5.
Para o operando direito da afirmação acima, o computador vai para o local de memória identificado por $ var e adiciona 3 ao que está lá. O que é que há 3 5. Quando for adicionado, você tem 8 na posição de memória identificado por $ var. A localização, possuindo de 8, o que foi atribuído à variável $ var, ainda é atribuído à mesma variável. Ao longo da linha, nada mudou a atribuição. O mesmo princípio é aplicado a cadeias, como no exemplo a seguir: $ var = "um"; $ var = $ var. " dois"; Note aqui que na segunda instrução, não há um ponto entre $ var e "dois".
Isso é chamado de o operador ponto; se junta a duas cordas juntos. Na primeira instrução, $ var tem o valor, "um". A variável, $ var identifica o local ter, "um". Na segunda instrução, para o operando à direita "dois" é adicionado (entrou) para este local, para dar a corda, "um dois". A identificação desta localização não mudou. Então $ var ainda identifica a localização. A localização ainda é atribuído a $ var. Assim, para modificar o conteúdo de um local, temos utilizado o mesmo local em vez de dois locais diferentes.
Diferentes locais de memória com diferentes variáveis Considere o seguinte duas declarações consecutivas: $ myVar = "Eu sou o conteúdo de um arquivo de texto grande do disco rígido, agora na memória."; $ Avar = "Eu sou o conteúdo de um arquivo de texto grande do disco rígido, agora na memória."; Você tem duas variáveis diferentes com nomes diferentes, mas com os mesmos valores de cadeia. Uma variável identifica uma posição de memória. Duas variáveis diferentes com dois nomes diferentes identifica duas posições de memória diferentes, tudo igual.
No caso acima, os dois valores, mesmo que são os mesmos, estão em dois locais de memória diferentes. Mesmo local de memória para duas variáveis diferentes Em PHP você pode fazer o mesmo local de memória tem duas variáveis diferentes. As duas variáveis diferentes, naturalmente, identificar o mesmo valor. Considere as seguintes duas declarações consecutivas: $ myVar = "Eu sou o conteúdo de um arquivo de texto grande do disco rígido, agora na memória."; $ hisVar = & $ myVar; Pela primeira declaração que você tem um valor atribuir à variável, $ myVar.
Na segunda instrução, $ myVar é precedido com o & sinal antes de ser atribuído a uma nova variável, $ hisVar. E é um operador. Na segunda instrução, o operador &, precedendo a primeira variável, faz a segunda variável identifica o mesmo local da memória (o mesmo valor), como a primeira variável. Uma coisa importante a notar aqui é que & $ myVar refere-se a um conteúdo local de memória. Você também pode dizer que o & $ myVar refere-se ao valor no local de memória.
Para a segunda instrução, & $ minhaVar, com &, pode ser considerada como uma referência, mas $ hisVar não pode ser considerada como uma referência; por favor, aceite isso. $ hisVar é uma variável, não uma referência; apenas aceitar isso. & $ myVar é atribuído (não equiparado) para US $ hisVar e em vias de o ser atribuído faz $ hisVar identificar o mesmo local da memória quanto $ myVar; aceite isso. Aceitar essas três frases que acabei de dar. Tentando entender por que eles são como que pode fazer com que você não entender referência PHP.
Agora, se você digitar, $ myVar = "homem"; ou US $ hisVar = "mulher"; O conteúdo da mesma localização de memória identificadas por $ minhaVar bem como hisVar $ mudaria. A primeira declaração mudaria o conteúdo de "homem" e a segunda instrução iria mudá-lo a "mulher". Com referência a como tal, e tanto $ minhaVar $ hisVar identificar o mesmo valor (local de memória). Usando uma referência sem pré-declaração ou Atribuição Na seção anterior, & $ myVar foi atribuído a $ hisVar, e US $ myVar já foi declarado. Você pode usar uma referência sem pré-declaração ou cessão.
Uma referência é constituído por e seguido por um nome de variável. O nome da variável não tem de existir antes, como no caso acima. No caso acima, você tem & $ myVar, onde $ myVar existia antes. Você usa essas referências dentro expressões e declarações. Você não pode começar com uma declaração dessa referência. Você não pode declarar uma variável com essa referência. Então você não pode fazer isso: & $ ref = "algum valor"; //errado Quando você tem uma referência como o & $ ref em um segmento de código, você pode atribuí-lo a uma variável indiretamente.
Um argumento, que é uma variável declarada em algum lugar, pode ter atribuído a ele uma referência, durante uma chamada de função. Algo como: $ Thevar = myFn ($ var1); onde $ var1 é uma variável declarada em algum lugar (acima) no código. A função, myFn (), retorna e $ ref durante a execução, o que é atribuído a $ Thevar. Podemos dizer, esta atribuição tem sido feito de forma indireta. A referência refere-se a uma localização da memória. Você pode usar a referência para fazer o que você quer fazer com a localização de memória, como a modificação do conteúdo do local de memória.
Você pode ter atribuído indiretamente a referência a uma variável e, em seguida, usar o conteúdo da posição de memória, através da variável. Neste artigo conteúdo de uma localização de memória e valor (literal), significam a mesma coisa. Quando você sabe o significado de uma referência; que é um estágio de compreensão referência. A próxima coisa a fazer é aprender a usá-lo. Leia. Desvantagem de não usar uma referência em determinadas situações Imagine que você tem um arquivo de texto em um disco rígido, e o conteúdo deste arquivo está agora na memória.
Você pode ter este conteúdo como uma string, atribuído a uma variável, de uma forma normal, em seu código. O que você realmente quer fazer com essa grande conteúdo de um arquivo, é mudar algum de seu texto, elimine algumas das seu texto ou acrescentar algum novo texto para o conteúdo. Depois que você salvar o conteúdo de volta, como um arquivo no disco rígido e você não precisa mais o conteúdo na memória. O código a seguir mostra uma maneira de anexar (adicionar no final) de texto para esse tipo de conteúdo (ele tem uma desvantagem): $ var1 = ".
Eu sou o conteúdo de um arquivo de texto grande do disco rígido, agora na memória"; appendFn função ($ var2) {$ var2 = $ var2. "O último texto."; return $ var2; } $ Var1 = appendFn ($ var1); echo $ var1; ?> No início do código, você tem a variável, $ var1. Para esta variável é atribuído um valor de cadeia. Este valor de cadeia é curto, mas deixá-lo representar o conteúdo de um arquivo de texto grande. Em seguida, você tem a função, appendFn (). Essa função adiciona a seqüência, "O último texto." para a seqüência da variável, $ var1.
A função é chamada da seguinte forma: appendFn ($ var1) onde a variável, $ var1 é enviado como argumento. A função em si tem o parâmetro, $ var2. Quando a função é chamada, este parâmetro identifica o valor do argumento enviado. Este parâmetro é realmente uma variável diferente a partir de $ var1. $ var2 mantém o valor do argumento enviado pela instrução de chamada. Então, pouco antes de a função é executada, você tem duas variáveis diferentes que permitem identificar o mesmo valor.
No entanto, nenhuma destas variáveis está lidando com referenciar, então você tem o mesmo valor em dois locais diferentes na memória. Uma das localizações é identificado por $ var1 e o outro é identificado por $ var2. Isto continua até que o estado final da execução do programa. Há duas declarações na definição da função. A primeira declaração acrescenta a seqüência, "O último texto." para o valor da variável, $ var2. A segunda instrução retorna o valor da variável, $ var2.
A função de chamada declaração no código (fora da definição da função) recebe esse valor e re atribui-lo para a variável, $ var1. Neste código, nenhuma referência foi usado oficialmente. Assim, as duas variáveis cada um tem o seu próprio local de memória. Uma variável está fora da definição da função, eo outro está dentro da definição da função. O local para a variável fora da definição da função, tem inicialmente um valor de cadeia. Após a chamada de função, este local tem um pedaço de corda adicionado a ele.
O local para a variável dentro da definição da função tem inicialmente a cadeia que a localização da variável externa tem. A segunda declaração na definição da função adiciona o pedaço de corda para o local. Note-se que a técnica acima descrita foi utilizada aqui. A existência destes dois locais é um desperdício de memória. Com referência, estes dois locais podem ser reduzidos para um único local (ver abaixo). Agora, a memória é sempre escasso. É como dinheiro, não importa o quanto você tem, você ainda tem razões para se precisam de mais dinheiro.
No código acima, toda a memória não tem sido utilizado economicamente. Você tem que tentar sempre usar o mínimo de memória, como você pode, quando possível. Saiba que o uso em referenciar a leva a um uso econômico da memória e melhora o desempenho do seu código. Passando uma variável por referência Há situações em que você só precisa se referir a um local de memória, a variável para a localização de memória não é muito importante. Não seria bom, se você tivesse uma referência que simplesmente refere-se ao local da variável $ var1 no código acima.
Você usar a referência para anexar o pedaço de corda. Após a chamada de função (declaração) e execução da função, você não precisa mais a referência. Desta forma, você terá apenas um local de memória para lidar com; não dois como antes. Então você economizar memória e não há um melhor desempenho. O código a seguir ilustra isso (veja explicação abaixo): $ var1 = "Eu sou o conteúdo de um arquivo de texto grande do disco rígido, agora na memória."; funcionar appendFn (ref & $) {$ ref = $ ref. "O último texto.
"; return $ ref; } $ Var1 = appendFn ($ var1); echo $ var1; ?> O código eo anterior são semelhantes. A diferença está na definição da função. Quando a função é chamada, a variável, $ var1 é passado como argumento. O parâmetro da função é agora uma referência. A parte variável ($ ref) desta referência não foi previamente declarado. Esta referência não é atribuído a uma nova variável e nunca será atribuído, diretamente (você nunca vai ter nada parecido, someVar $ = & $ ref). No entanto, é indirectamente atribuído a $ var1 no início da execução da função.
Assim como a função é executada, ambos $ var1 e $ ref & significam a mesma posição de memória. O pedaço de código que você considerar como uma referência, começa com &, seguido de um nome de variável, por exemplo, $ ref, que começa com os US $ assinada. Dentro da definição de função, você pode usar a parte do nome de variável precedido por US $ para resolver o local designado pela referência. Como eu disse acima, depois de conhecer a referência ou seja, você tem que aprender como usá-lo. Nesse código, $ ref dentro da definição da função está se referindo ao mesmo local quanto $ var1 fora.
A instrução de retorno utiliza $ ref para retornar o conteúdo (valor) da posição de memória. Ele não usa & $ ref embora e $ ref é efetivamente o que a chamada de função retorna. Isso acontece aqui, que a localização do conteúdo da fonte e de destino são os mesmos. Como você pode ver, usamos apenas um local em vez de dois de memória (como no caso anterior). Nós conseguimos economia de memória e um melhor desempenho. Função a devolver uma referência no código acima, uma referência foi retornada.
No entanto, não é todos os momentos em que a localização da referência é a mesma que a do argumento passado. Algumas funções podem não ter qualquer parâmetro (para receber nenhum argumento), mas você iria querer isso para retornar uma referência. A função no código a seguir não recebe um argumento. A função retorna uma referência e na instrução de chamada, a referência é indiretamente atribuído a uma variável.
função & AFN () {$ myVar = "um valor"; return $ myVar; } $ Thevar = AFN (); echo $ Thevar; ?>
0 (Dot N…