Pergunta

Eu estive fuçando em PHP para OOP e notei algo...Os objetos são reinstanciados sempre que a página é atualizada.O problema é que quero que o objeto mantenha certas informações nas variáveis ​​de classe durante todo o tempo que alguém estiver em um site.

  1. Existe algum tipo de maneira de manter um objeto vivo o tempo todo em que alguém está surfando no site?
  2. Que alternativas existem para o meu problema?

Seria muito útil ter um exemplo também!

Foi útil?

Solução

PHP não tem estado.Cada carregamento de página é um evento único.Você pode persistir dados com sessões ou armazenando informações em um banco de dados.

Outras dicas

Você pode usar Sessões para manter os dados associados a um usuário entre diferentes páginas (citando) :

O suporte à sessão no PHP consiste em uma maneira de preservar certos dados nos acessos subsequentes.

Veja o Tratamento de Sessão seção do manual, para mais informações sobre as sessões.

Um script php precisa sair antes que o apache possa servir a página, então se você realmente quiser fazer isso, uma coisa que você pode fazer é serializar e armazene todos os objetos que você deseja persistir e usar sessão cookies para rastrear os usuários

  1. PHP não tem estado, cada solicitação é um novo processo no servidor

Sua melhor aposta é usar os dados da sessão e entregá-los aos objetos ao instanciá-los.Faça com que os construtores extraiam os dados necessários da sessão e você terá essencialmente a plenitude de estado necessária.

você pode acessar a sessão usando

$_SESSION['stuff'] = $data;

Em seguida, você pode usar seus objetos como $ x = new DataStore ($ _ Session ['STIDY']);

se houver dados na sessão, o objeto será preenchido a partir desses dados.Caso contrário, o padrão será o init padrão.

Mesmo quando abordagens como serializar objetos e depois desserializá-los são úteis, você deve primeiro ter certeza de que entendeu por que seus objetos "desaparecem".

HTTP, o protocolo usado para recuperar páginas e outros recursos de servidores Web, é apátrida.Basicamente significa que uma solicitação não sabe nada de outra solicitação, mesmo quando vem do mesmo usuário.Pense desta forma, quando você solicita sua página PHP, o script é executado e após terminar o Apache envia o resultado para você.Quando você solicita a página novamente, ela faz a mesma coisa como se fosse a primeira vez que você fez isso.É apátrida.

Existem técnicas para manter o estado entre as solicitações (para não esquecer seus objetos) e envolvem coisas como cookies ou reescrita de URL.Mas você deve ter em mente a natureza sem estado do HTTP (e, portanto, do seu script PHP) ao desenvolver aplicativos da Web.

SESSÕES são boas, eu as uso para manter o estado do objeto em algumas de minhas programações PHP.

Ou uma solução melhor seria usar Flexível então você não precisa se preocupar com o protocolo HTTP sem estado...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top