Ir para conteúdo

POWERED BY:

Arquivado

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

cleber_mav

[Resolvido] Problema Orientação a Objetos

Recommended Posts

Pessoal estou com o seguinte problema, não consigo instanciar meus objetos ex:


teste.php
<?php

class Imprime
{
private $conteudo = "Esta funcionando";
public function getConteudo() { return $this->conteudo; }
}
?>

app.php
<?php
$var = new Imprime();
echo $var->getConteudo();
?>

este exemplo que eu fiz não roda!!

 

Não sei se estou fazendo algo errado ou é problema com o php ou apache.

 

O estranho é que se o código estiver todo em um único arquivo ele funciona, mas se tentar instanciar em arquivos diferentes não rola!

 

Alguém poderia me auxiliar?

 

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você recebe algum retorno de erro do PHP?

 

Lembrando que para instanciar uma classe, a mesma deve existir no arquivo que cria seu objeto.

Ou seja, se você não incluir ou requerir o arquivo da classe no arquivo que fará a instância, você receberá um erro dizendo que a classe não foi encontrada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faltou incluir a classe no arquivo em que você vai chamar ela

 

faz assim:

 

app.php

<?php

include_once("teste.php");

$var = new Imprime();
echo $var->getConteudo();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz o teste com os seguintes arquivos: application.php e content.php, os dois estão na mesma pasta:

 

content.php

<?php

 

class Content

{

$var = "It's right";

public function getVar(){ return $this->var; };

}

?>

 

application.php

 

<?php

 

include_once("content.php"); // já tentei require_once e include também.

$var = new Content();

echo $var->getVar();

 

?>

 

Mensagens de erro:

 

Firefox: Não acusa mensagem alguma, somente não mostra o contúdo.

Chrome: HTTP Error 500 (Internal Server Error): An unexpedted conditions was encountered while the server...

 

Bom eu testei em duas máquinas diferentes ambas com linux (ubuntu 10.10 e debian 6.0).

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compare a sua com essa:

<?php

class Content
{
private $var = "It's right"; // faltou private
public function getVar(){ return $this->var; } // removido ";" após o fechamento da chave
}

$var = new Content();
echo $var->getVar(); 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos meu problema esta em instanciar um objeto em outro arquivo e não no mesmo como descrito acima. Eu passei o meu atributo $var para private e removi o ";", mas mesmo assim ocorreu mesmo erro.

 

Não sei como vou utilizar OO em PHP se não posso instanciar os obejtos...rsrss

 

Vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Content.php

<?php

class Content
{
       private $var = "It's right"; // faltou private
       public function getVar(){ return $this->var; } // removido ";" após o fechamento da chave
}

?> 

 

Test.php

<?php

include_once ( 'Content.php' );

$var = new Content();
echo $var->getVar(); // It's right

?>

 

Testado e funcionando :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos valeu a força funcionou!!!

 

Um dos erros era o php no ubuntu que foi instalado com o xampp não está rodando corretamente, testando o código que você me passou em outra máquina está ok.

 

Vlw a força.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

Aproveitando o tópico

Sei que os posts são antigos, têm mais de um ano, mas tenho uma dúvida.

Criar um objeto da classe A dentro da classe B de mesmo pai, isto é, as classes A e B são de mesmo pai. o que ocorre?

 

Na verdade ocorreu comigo e aqui, não dá erro, mas também não mostra nada.

Não encontrei ainda o porque, mas tenho este palpite. Talvez seja porque as classes sejam do mesmo pai. O que vcs acham?

 

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é indiferente, quando você instancia uma classe, cria um objeto. Mesmo sendo do mesmo pai, não haverá problemas.

 

Faça você mesmo o teste:

<?php

class A {
public function __construct() {
	echo 'instancia classe A<br/>';
}
}

class B extends A {
public function __construct() {
	parent::__construct();
	echo 'instancia classe B<br/><br/>';
}
}

class C extends A {
public function __construct() {
	parent::__construct();
	echo 'instancia classe C<br/><br/>';
	$c = new B;
}
}

$b = new C;

Saída:

instancia classe A

instancia classe C

 

instancia classe A

instancia classe B

 

Um caso muito comum são das classes PessoaFisica e PessoaJuridica. Ambas classes herdam da classe Pessoa.

class Pessoa {}

class PessoaFisica extends Pessoa {}

class PessoaJuridica extends Pessoa {}

Uma PessoaFisica possui pais. Logo, são duas instâncias do mesmo tipo de classe (PessoaFisica).

 

Uma PessoaFisica pode possuir um, ou mais, emprego(s). Logo, é a instancia de outra classe(PessoaJuridica) que, por consequência, possui a classe Pai em comum (Pessoa).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, primeiramente muito obrigado pela prontidão em responder.

Muito pertinente o caso das classes PessoaFisica e PessoaJuridica.

Realmente poderia ter feito eu mesmo. Desculpe.

Mas acredito que as dúvidas ajudam e agregam valor ao fórum e o trabalho colaborativo é muito importnte.

 

Bom, vamos sofisticar um pouco mais.

No seu teste tá tudo num mesmo arquivo. No meu caso, não encontra a class B, então fiz um include_once.

Aí, não dá erro nenhum, mas também não mostra nada.

 

Então, pelo que vi no seu teste, não tem haver com algum proplema na herança.

O que seria então?

 

E obrigado mesmo pela prontidão na resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa incluir(include/require) exatamente na ordem de hierarquia das classes.

 

Vamos suporte que possuímos a.php, b.php e c.php. Cada arquivo referente as classes A, B e C, respectivamente.

A inclusão, pode ser feita da seguinte maneira:

include('a.php');
include('b.php');
include('c.php');

ou

include('a.php');
include('c.php');
include('b.php');

 

A classe A, precisa ser a primeira à ser incluída, pois ambas as classes dependem(herança/extends) dela.

 

O fato de a classe C instanciar a classe B dentro do construtor, não é afetado pela ordem de inclusão. Somente necessita que ambas as classes tenham sido inclusas no arquivo.

 

Pois a instancia da classe B, do construtor da classe C, só, e somente só, será criada quando a classe C for instanciada.

 

Diferente do quesito "extends", que ao incluir a classe, necessita da classe pai já inclusa.

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.