danimac13 0 Denunciar post Postado Junho 1, 2009 Olá pessoal, Faz muito tempo que não posto aqui. Voltei a me interessar pelo php por ser orientado a objetos agora. Estou tendo dificuldades com esse oo do php. Gostaria que avaliem meu caso e me ajude. Possuo 2 classes: Linha <?php class Linha { private $numero; private $ocupada; function __construct($numero, $ocupada){ $this->numero = $numero; $this->ocupada = $ocupada; } function setNumero($numero){ $this->numero = $numero; } function getNumero(){ return $this->numero; } function setOcupada($ocupada){ $this->ocupada = $ocupada; } function getOcupada(){ return $this->ocupada; } } ?> LinhaControl <?php include "../modelo/Linha.php"; include "../db/ConexaoMysql.php"; class LinhaControl { public function getLinhas(){ //Instanciando um objeto $ObejtoConexao = new ConexaoMysql(); $linhas = array(); $result = $ObejtoConexao->sql("select * from Monitor"); while($lista = mysql_fetch_array($result)) { $linhas[] = new Linha($lista['NRLinha'], $lista['Ocupada']); } $ObejtoConexao->fechar(); return $linhas; } } ?> <? /* $linhaControl = new LinhaControl(); $linhas = $linhaControl->getLinhas(); foreach($linhas as $linha){ print $linha->getNumero(); } * / */ ?> O codigo comentado no final do LinhaControl só funciona dentro do arquivo da classe: LinhaControl.php Importado de fora, ele não consegue percorrer o array e imprimir os dados. Porque isso? Alguém pode dar um help? Agradeço desde já. Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Junho 1, 2009 Uhn...meu melhor palpite é que a inclusão vem de um nivel diferente desse script...o que de certa forma gera erros. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 1, 2009 Mesmo dando include da classe no arquivo em que você qr usar o objeto, não funciona ?? Para instanciar uma classe, $linhaControl = new LinhaControl();, você precisa que o arquivo da classe, esteja includo antes do instanciamento. Veja sobre __autoload Compartilhar este post Link para o post Compartilhar em outros sites
danimac13 0 Denunciar post Postado Junho 1, 2009 Mesmo assim Bruno. Quanto a esse __autoLoad() não tentei ainda. Vou tentar e amanhã dou a resposta. Qual a melhor forma de gerênciar classes fora do arquivo pelo php? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 1, 2009 É o autoload mesmo :lol: http://br2.php.net/autoload (veja o primeiro exemplo) Dê uma conferida nos níveis de arquivos, pq além dos includes, não consegui imaginar outro 'erro'. Compartilhar este post Link para o post Compartilhar em outros sites
danimac13 0 Denunciar post Postado Junho 2, 2009 Estou achando agora que o problema é tipagem. No código abaixo por exemplo ele imprime 12. Será que o php não está reconhecendo que estou passando uma array de Linhas? <?php function __autoload($class_name){ if($class_name == "LinhaControl"){ require_once("control/" . $class_name . ".php"); } else{ require_once("modelo/" . $class_name . ".php"); } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> <style> body, table, input, select, textarea {FONT-FAMILY: verdana; FONT-SIZE: 11px; COLOR: #000000;} form {FONT-FAMILY: verdana; FONT-SIZE: 11px; COLOR: #000000; border: 0px solid #000000;padding:0;margin:0} input, select, textarea {COLOR: #000088; BACKGROUND: #FFFFFF; BORDER: 1px solid #000000} .btnapp {cursor: pointer; COLOR: #FFFFFF; BACKGROUND: #0080FF; FONT-WEIGHT: bold} .selbtnapp {cursor: pointer; COLOR: #FFFFFF; BACKGROUND: #0050AA; FONT-WEIGHT: bold} .btncnl {cursor: pointer; COLOR: #FFFFFF; BACKGROUND: #FF8800; FONT-WEIGHT: bold} .Btn {cursor: pointer; text-decoration: underline; color: #00f;} </style> </head> <body> <input class="selbtnapp" type="button" value="Troncos" /> <br /> <?php $linhaControl = new LinhaControl(); $linhas = new Linha("12", "sim"); print $linha->getNumero(); ?> <br /> <input class="selbtnapp" type="button" value="Ramais" /> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
danimac13 0 Denunciar post Postado Junho 2, 2009 Descobri. O php necessita que seja importado o arquivo que é usado durante todo o processamento. Mesmo que seja transparente para você. Ele usa importação global. No exemplo abaixo: $teste = new Teste(); $teste->facaAlgo(); Se facaAlgo estiver usando a classe Abobrinha o lugar onde teste é executado precisa importar Abobrinha. Compartilhar este post Link para o post Compartilhar em outros sites