Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Dias_132983

Oque é um ponteiro?

Recommended Posts

Não só em PHP, mas de forma geral em programação. Ponteiro é algo que está se relacionando com um dado qualquer, seja um dado contendo num vetor, ou em alocação de memória, no banco de dados. Entendo que pode ser por aí! Me corrijam se estiver errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

um tipo de dado que faz referência a um endereço de memoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O conceito de ponteiro em PHP difere um pouco dos ponteiros do C.

 

Um ponteiro em PHP normalmente itera sobre uma variável do tipo resource.

 

Por exemplo, quando você faz um select no banco de dados, é o ponteiro quem busca as linhas do retorno da consulta.

 

Quando você abre um arquivo com fopen, o ponteiro dita a posição (linha e coluna) do arquivo que será acessada.

 

A exceção para ponteiros fora de resource types é dentro de um array, ou da interface Iterator. Esta última, você mesmo deve implementar seu próprio sistema de ponteiro.

 

Exemplos:

$dados = array('primeiro', 'segundo', 'terceiro', 'quarto', 'quinto');

echo current($dados); // primeiro
echo current($dados); // primeiro -- não houve movimentação de ponteiro

next($dados);

echo current($dados); // segundo -- a função next moveu o ponteiro

 

 

 

class Exemplo implements Iterator
{
   private $pointer = 0;
   private $data    = array();

   public function __construct()
   {
       foreach (func_get_args() as $argument) {
           $this->data[] = $argument;
       }
   }

   public function current()
   {
       return $this->data[$this->pointer];
   }

   public function next()
   {
       $this->pointer += 1;
   }

   public function rewind()
   {
       $this->pointer = 0;
   }

   public function key()
   {
       return $this->pointer;
   }

   public function valid()
   {
       return array_key_exists($this->pointer, $this->data);
   }
}


$e = new Exemplo('primeiro', 'segundo', 'terceiro');

echo $e->current();
echo $e->current();

$e->next();

echo $e->current();

 

 

Posso estar falando besteira, mas acredito que a confusão com os ponteiros do PHP se dêem devido ao fato de, a manipulação dos resource types do PHP serem feitas com os ponteiros do C. E no C, a única forma de se obter esse tipo de funcionalidade seja com ponteiros, os da linguagem mesmo.

 

Mas, afinal, quem são esses ponteiros do C

 

Agora sim entramos no conceito que os colegas acima citaram. Em PHP, chamamos isso de referência. Basicamente, uma variável que armazene uma referência é um atalho para determinado valor/variável/objeto/recurso.

 

$a1 = 'A';  // a variável $a1 tem o VALOR 'A'

$a2 = $a1;  // a variável $a2 tem o VALOR de $a1

$a3 = &$a1; // a variável $a3 tem a REFERÊNCIA de $a1
// Ou seja, $a3 APONTA PARA $a1.

// As consequências disso são:
$a1 = 'a';  // O VALOR de $a1 agora é 'a'

echo $a1; // a -- pois, o VALOR de $a1 é este.

echo $a2; // A -- este foi o VALOR armazenado na linha 4

echo $a3; // a -- $a3 retorna o VALOR de $a1 que é sua REFERÊNCIA

 

Sugiro que dê uma lida no link do manual que postei. Se surgirem dúvidas posteriores, torne a postar neste tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.