Jump to content

PHP Orientado a Objectos


Recommended Posts

Posted

Quando disse  que não se pode correr objectos utilizando OO estava a referir-me a isto (PHP 4)

class a {

var $abc = "teste";

function b () {

echo $this->abc; //Mostra um erro se utilizarmos o OO "::"

}
}

a::b(); //Não funciona

Experimenta lá esse código para ver se funciona...

Posted

Pois este codigo aparentemente nao funciona. Não tou muito interessado em descobrir porquê, mas o operador "::" pode ser usado em PHP4.

"Pensa positivo: tudo pode piorar"

Posted

Pois este codigo aparentemente nao funciona. Não tou muito interessado em descobrir porquê, mas o operador "::" pode ser usado em PHP4.

Ninguem disse que o operador "::" não pode ser usado em PHP 4 😄 Estou a falar sobre "CORRER OBJECTOS" utilizando "::" 😉

Posted

Define "correr objectos", sff.

Já agora, leste alguma coisa do link que deixei..?

O Gurzi é que disse correr objectos mas pelo que ele disse eu entendi que correr objectos é tipo chamar um var da classe utilizando $this (ex: $this->var ) e depois chamar a função (ex: Classe::funcao(); a função tem $this->var ) e eu só repeti "correr objectos" 😉😛

Não sei se reparaste mas o link que me deste é sobre classes do PHP 5 e não do PHP 4 (que é o que estamos falar neste caso) 😄

Posted

Bem visto (se bem que nesta caso concreto é irrelevante), ta aqui o link para PHP4. ?

Mas afinal não tou a perceber qual é a duvida..? o "::" funciona perfeitamente mesmo em PHP4, dentro de classes, fora de classes, etc....  😕

Ninguém aqui tem duvidas.. eu só disse que não se pode "correr objectos" ou seja chamar objectos da classe ( $this->var ) se utilizarmos o operador  "::"  de resto é claro que o operador funciona BEM dentro e fora da classe no PHP 4 e PHP5 😉

Posted

Sim, com o $this não funciona, logicamente. O teu exemplo:

Quando disse  que não se pode correr objectos utilizando OO estava a referir-me a isto (PHP 4)

class a {

var $abc = "teste";

function b () {

echo $this->abc; //Mostra um erro se utilizarmos o OO "::"

}
}

a::b(); //Não funciona

Experimenta lá esse código para ver se funciona...

o "a::b();" realmente não parece funcionar, mas o problema não parece ser do uso do "::".

Usando outro exemplo já fornecido,

<?php
error_reporting(E_ALL);
class Homem {
    
   var $nome;
    function teste()
    {
        return "homem";
    }
} 
$obj = new Homem();
echo $obj->teste();
echo '<br />';
echo Homem::teste();
?>

funciona.

"Pensa positivo: tudo pode piorar"

Posted

Claro que assim funciona meu caro porque não esta a ser chamado nenhum objecto ...  :wallbash: (é assim tão dificil de entender )

Tenta la colocar dentro da função teste  "return $this->nome";  para ver se  Homem::teste(); funciona 😉

Nós só estamos a falar sobre "CHAMAR OBJECTOS" utilizando ::  (quantas vezes tenho que repetir :wallbash: )  por isso escusas de dar esses exemplos que ja foram dados neste tópico umas 3 vezes

Posted
Em 27/12/2006 às 20:26, jreis disse:

É possível, sinceramente (ainda) não me tenho preocupado muito com PHP5.

Se eu fosse a ti começava-me a preocupar já que o PHP6 vai perder muita coisa que existia no PHP4 😉

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!

Posted
Em 27/12/2006 às 21:40, jreis disse:

Sim, com o $this não funciona, logicamente. O teu exemplo:

o "a::b();" realmente não parece funcionar, mas o problema não parece ser do uso do "::".

Usando outro exemplo já fornecido,

<?php
error_reporting(E_ALL);
class Homem {
    
   var $nome;
    function teste()
    {
        return "homem";
    }
} 
$obj = new Homem();
echo $obj->teste();
echo '<br />';
echo Homem::teste();
?>

funciona.

Que versão do php tens ???

Digo isto porque parece-me que a partir da 5 o var não funciona no php  e dá erro..

Posted

@Gurzi é possivel usar var no PHP5 tens aqui 1 exemplo:

<?php
class a {

        var $var = 'teste';

        public function b () {

                echo $this->var;

                }
}
$classe = new a();
$classe->b();
?>

Só não podes usar "var" no PHP 5 se usares static ou public etc

Exemplo

class a { 
      
      var $abc = 'teste'; //isto esta certo
     
      public var $abc = 'teste';  //Isto esta errado
      
      public $abc = 'teste';  //Isto esta certo

      static var $abc = 'teste'; //isto esta errado

      static $abc = 'teste'; //isto esta certo
  
      public static $abc = 'teste'; //isto esta certo
     
      public static var $abc = 'teste'; //isto esta errado
...
Posted

Claro que assim funciona meu caro porque não esta a ser chamado nenhum objecto ...  :wallbash: (é assim tão dificil de entender )

Tenta la colocar dentro da função teste  "return $this->nome";  para ver se  Homem::teste(); funciona 😉

Nós só estamos a falar sobre "CHAMAR OBJECTOS" utilizando ::  (quantas vezes tenho que repetir :wallbash: )  por isso escusas de dar esses exemplos que ja foram dados neste tópico umas 3 vezes

Ahh..! Tens de explicar melhor o que queres dizer, nomeadamente esta parte

a::b(); //Não funciona

deu-me a entender que não funcionava por se usar o "::". Quando de facto nao tem nada a ver para o caso. Sendo assim, estamos de acordo. 😄

Quanto a PHP5/6 (que ainda nem saiu), sinceramente não estou assim "tão" preocupado devido ao facto de haver tão poucos hosts com isso, a taxa de adopção parece ser ainda mais lenta do que PHP3>PHP4. "Logo se vê".

"Pensa positivo: tudo pode piorar"

Posted

Das duas uma ou não entendeste mesmo ou só queres ter um pouco de razão o.O

Vou tentar explicar pela ultima vez e quando digo ultima vez é mesmo ultima.. nem vou responder mas este tópico se for para falar disso outra vez.

No PHP 4 quando usamos o operador "::" não podemos chamar objectos na classe (ex: $this->var (isto é um objecto)) porque isso gera um erro fatal, se quisermos chamar objectos numa classe (ex: $this->var ) temos que usar o operador "new", vou dar um exemplo para que entendas melhor.

<?php
error_reporting(E_ALL);
class a {

        var $abc = 'teste';

        function b () {

                echo $this->abc; //isto é um objecto,,, se chamarmos a classe usando o operador "::" isto vai gerar um erro fatal porque nâo podemos chamar objectos quando usamos o operador "::" ..... para evitar esse erro temos que chamar a classe usando o operador "new"

                }
}

$classe = new a(); //isto è chamar uma classe usando o operador "new" isto funciona bem
$classe->b();

a::b(); //isto è chamar uma classe usando o operador "::"  isto gera um erro fatal ou seja isto não funciona .. E se ainda não entendeste porquê vou repetir... PORQUE CHAMAMOS UM OBJECTO NA CLASSE "a" ( $this->abc );

?>

O erro fatal que gera é mais ou menos este  PHP Fatal error:  Using $this when not in object context in...

Agora faz-me um favor... Lê o que escrevi com atenção. Faz 1 teste com esse código e tira as tuas conclusões.

Posted

Eu já concordei contigo no meu post anterior, o que é que queres mais? Como já disse, foi má interpretação da minha parte. Não preciso de mais explicações, obrigado por me tentares passar um atestado de burrice.

"Pensa positivo: tudo pode piorar"

Posted

Concordo porque realmente vejo que está certo, esta questão toda surgiu não por falta de conhecimento da minha parte, mas sim por uma interpretação errada de um comentário teu.

"Pensa positivo: tudo pode piorar"

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.