Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom galera, tenho uma dúvida simples e idiota em relação ao escopo dos valores atribuídos a variáveis no script PHP.
Por exemplo, eu tenho uma classe Pessoa, e nela tem uma propriedade nome. Quando eu instanciar ela e atribuir um valor para essa propriedade, se eu jogar ela como saída do navegador, ele simplesmente será a saída do navegador e esse objeto Pessoa no script será destruído?
Se sim, então como que funciona um singleton em PHP, já que o valor sempre será destruído?
class Pessoa {
private $nome;
public function __construct($nome) {
$this->nome = nome;
}
public function getNome() {
return $this->nome;
}
}
$pessoa = new Pessoa('Fernando');
echo $pessoa->getNome();Não existe a possibilidade de eu "persistir" um valor variável no script mesmo após ele ser executado? Aliás, existe razão por existir isso? Estou viajando? kk
EDIT ---
Minha dúvida era parecida com a desse tópico, que por sinal o título do tópico não tem nada a ver com o assunto.
Então lendo as respostas abaixo, vi o Prog comentando de sessões, então entrei no manual do php, na parte de introdução a sessões, e era exatamente o que eu precisava.
Resolvido. :D
Entendi Gabriel, eu vi isso que você falou um pouco no manual do PHP mesmo!
Vou ler sobre esse artigo que você me passou, vlw!
Um dos problemas (em certos pontos soluções), do php é a 'destruição' dos objetos no final da execução do script. Como eu vi da programação desktop (Java) para o PHP, senti um certo desânimo nisso.
O Registry, no PHP, é muito útil para não necessitar instanciar uma classe duas vezes. A única restrição é que, sempre deverá ser instanciado o objeto na execução do script.
Como o exemplo dado pelo João Batista Neto, o Registry se torna excelente para evitar redundância de objetos. Mas, no PHP, vai ter que instanciar no início do script... '-'
Ou trabalhar as os objetos, ou o Registry, para mantê-los em sessão. O qual não vi ninguém fazer.
Lembre-se que, para manter um objeto em sessão, ele deve permitir o uso da função serialize(). Ou, como última alternativa, a classe deve ser incluida antes da chaamada de sessão. Caso isso não for feito, sua será conhecida como "__PHP_Incomplete_Class_Name". Para trabalhar com classes em sessão, necessita um bom cuidado.
Por exemplo, a classe DateTime. Após ser inclusa na sessão, recarregado a página e retornado o mesmo objeto, ele não possui mais suas propriedades. Essa classe não trabalha bem com o método serialize(), ou não o implementa.
Os métodos mágicos para isso são: __sleep() e __wakeUp();
Uma leitura bem interessante é:
Serializing objects - objects in sessions