Programação Orientada a Objetos com PHP:Atualizar mata meus objetos
-
21-09-2019 - |
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.
- Existe algum tipo de maneira de manter um objeto vivo o tempo todo em que alguém está surfando no site?
- Que alternativas existem para o meu problema?
Seria muito útil ter um exemplo também!
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
- 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...