Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

danimac13

[Resolvido] Dificuldades com percorrimento de array de objetos.

Recommended Posts

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

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

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

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

É 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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.