Eddu Posted October 22, 2007 at 04:26 PM Report Share #142116 Posted October 22, 2007 at 04:26 PM Boas Pessoal, após a minha apresentação aqui vou deichar a minha primeira dúvida. Comecei á dias a tentar mudar as minhas rotinas de programação para passarem a funcionar com orientação a objectos. Tenho muito experiencia em java, pelo que em php nenhuma. estava então a tentar fazer um script simples para ver se funcionava como pensava, entao pensei o seguinte: crio uma página, em que a primeira coisa que escrevo é login....o programa cria-me então um objecto chamado teste...em que mostra depois um nome. posteriomente a escrever login, quero escrever qualquer coisa...e que o meu objecto seja mudado consoante o que for escrito, aqui fica o código: ______________________________ <?php include('teste.php'); if(isset($_SESSION)){ session_start(); } if(isset($_POST['textfield']) && $_POST['textfield']=="login"){ $teste=new teste(); $_SESSION['teste']=serialize($teste); $teste->atribuirNome('eddu'); } else { if(isset($_POST['textfield'])){ $teste = unserialize($_SESSION['teste']); $teste->atribuirNome('eddu'); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <form id="form1" name="form1" method="post" action="teste_form.php"> <p> <input type="text" name="textfield" /> <input type="submit" name="Submit" value="Submit" /> </p> <p> <?php if(isset($teste)) echo $teste->buscarNome();?></p> <p> </p> </form> </body> </html> _____________________________________ Objecto: _____________________________________ <?php class teste { var $nome="carlos"; function atribuirNome($nome_="guest"){ $this->nome=$nome_; } function buscarNome(){ return $this->nome; } } ?> ________________________________ tudo corre bem ..faço login, ele escerve o que quero..mas posteriomente, quando escrevo algo sem ser login, ele dá erro porque não consegue atribuir a $teste um objecto #Fatal error: Call to a member function atribuirNome() on a non-object in C:\wamp\www\Aquario\teste_form.php on line 19 # Espero que me ajudem a resolver este problema, para finalmente passsar a utilizar linguagem orientada aobjectos como faço em java. Carlos Correia Link to comment Share on other sites More sharing options...
pedrotuga Posted October 22, 2007 at 04:35 PM Report Share #142119 Posted October 22, 2007 at 04:35 PM tens um if... else No if crias o objecto e acedes a um membro da classe na boa. Mas no else não crias o objecto, logo da esse erro. Link to comment Share on other sites More sharing options...
Eddu Posted October 22, 2007 at 04:40 PM Author Report Share #142121 Posted October 22, 2007 at 04:40 PM tens um if... else No if crias o objecto e acedes a um membro da classe na boa. Mas no else não crias o objecto, logo da esse erro. boas pedrotuga, a ideia é mesmo esssa... é criar o objecto apenas uma vez...para depois o poder utilizar ao longo do programa..á medida que vou submetendo o formulario. é como se tivessemos um objecto de sessão guardada num $_SESSION['sessao'], e quisesse ao longo de todas as páginas, ir tendo aceso ao mesmo objecto, que por exemplo foi instanciado apenas uma vez no login. Link to comment Share on other sites More sharing options...
djthyrax Posted October 22, 2007 at 04:56 PM Report Share #142127 Posted October 22, 2007 at 04:56 PM Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. 🙂 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Eddu Posted October 22, 2007 at 09:04 PM Author Report Share #142254 Posted October 22, 2007 at 09:04 PM Resolvido, o codigo ficou o mesmo mudou apenas a sessão ao inciar if(isset($_SESSION)){ para session_start(); Link to comment Share on other sites More sharing options...
MX+ Posted October 22, 2007 at 10:26 PM Report Share #142285 Posted October 22, 2007 at 10:26 PM Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. 😉 Pode. É esse o uso do serialize. Menos comum em PHP, MUITO comum em Java. Gostava de ver um artigo sobre isso. Se ninguém tiver interessado em escrever vou pensar nisso Link to comment Share on other sites More sharing options...
djthyrax Posted October 22, 2007 at 10:34 PM Report Share #142287 Posted October 22, 2007 at 10:34 PM Não podes guardar objectos. Para o que estás a fazer, aconselho o uso de sessões. 😉 Pode. É esse o uso do serialize. Menos comum em PHP, MUITO comum em Java. Gostava de ver um artigo sobre isso. Se ninguém tiver interessado em escrever vou pensar nisso Eu quando pensei em guardar objectos, estava a pensar em guardar mesmo tudo, funções inclusivé. 😄 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pedrotuga Posted October 22, 2007 at 11:26 PM Report Share #142309 Posted October 22, 2007 at 11:26 PM @ eddu: não percebeste... caso a condição do if não se verifique o objecto não é criado nunca. Se queres cria-lo independetemente do rumo que a execução do script tome então tens que o criar antes de um teste da condição if else. Tipo... se entrares no else vais tar a utilizar um objecto que não existe. @ djthyrax: acho que estás um pouco confundido. Um objecto só tem atributos, a classe à qual ele pertence é que tem membros. Essa classe tem que estar definida onde quer que seja que os objectos são utilizados. Poderia eventualmente guardar-se o código de uma classe na sessão e depois interpretar esse código, mas isso seria um exemplo paradigmático daquilo que vulgarmente se chama código-esparguete. Normalmente define-se a classe num script e inlcui-se esse script. @mx+: penso que não há grande alarido sobre isto por aí fora pela simples razão de ser trivial fazer uma operação dessas. serializa, manda para a sessão, desserializa Link to comment Share on other sites More sharing options...
djthyrax Posted October 22, 2007 at 11:30 PM Report Share #142311 Posted October 22, 2007 at 11:30 PM @ djthyrax: acho que estás um pouco confundido. Um objecto só tem atributos, a classe à qual ele pertence é que tem membros. Essa classe tem que estar definida onde quer que seja que os objectos são utilizados. Poderia eventualmente guardar-se o código de uma classe na sessão e depois interpretar esse código, mas isso seria um exemplo paradigmático daquilo que vulgarmente se chama código-esparguete. Normalmente define-se a classe num script e inlcui-se esse script. Eu quando escrevi o primeiro post, estava confuso sim. E, ao fazeres serialize() de um objecto, não vais guardar as funções, ou seja, só guarda a estrutura, antes de poderes usar o objecto, tens de fazer include à classe. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
MX+ Posted October 23, 2007 at 07:10 PM Report Share #142511 Posted October 23, 2007 at 07:10 PM Tanto este tópico como o outro deram-me ideias novas. Acho que é pratica comum abusar da BD em PHP. Chamar a BD para tudo, sempre a verificar e a tirar indicaçoes. Vou começar a pensar em serializaçao como forma fácil e rápida de sacar informação não-tão-dinamica. Link to comment Share on other sites More sharing options...
pedrotuga Posted October 24, 2007 at 12:56 AM Report Share #142589 Posted October 24, 2007 at 12:56 AM eu até acho o contrario... quando olho para software comercial só me vem a cabeça isto: "Mas porque é que eu não uso e abuso da base de dados, ela serve é par ser usada a todo o gás" Uma lição que tenho aprendido. Nos dias que correm armazenar dados é barato, posto isto quanto mais dados se tiver melhor. Bota informação sobre tudo e mais alguma coisa tudo bem guardadinho e pronto a usar. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now