• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

PHP Orientado a Objectos

40 mensagens neste tópico

Bem criei este tópico porque acredito que muita gente vai precisar dele.

Estou a aprender e isto está me dar aqui um erro estúpido

<?php

class Foo
{
public static $eu_static = ‘foo’;

public function valorStatic() {
return self::$eu_static;
}
}

print Foo::$eu_static; // foo

$obj = new Foo();
$obj->valorStatic(); // foo 
    
    ?>

ERRO :

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /Users/tiagopalhota/Sites/teste.php on line 3

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ERRO :

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /Users/tiagopalhota/Sites/teste.php on line 3

Qual é a versão do teu PHP ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Upgraded and working ;)

Thnks !

Não fazia a mínima ideia que php before v5.0 não corria objectos.

Fica a dica;)

Thnks!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dá para faze echos dentro de uma função ?

<?php
error_reporting(E_ALL);
class Homem {
    
    public var $nome;
    
    public function teste()
    {
        echo "homem";
    }
}


$obj = new Homem();
$obj->teste();

    
    ?>

   

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dar dá, mas não é a forma mais apropriada de "escrever" coisas. Digo eu.

Experimenta assim:

<?php
error_reporting(E_ALL);
class Homem {
    
    public var $nome;
    
    public function teste()
    {
        return "homem";
    }
}


$obj = new Homem();
echo $obj->teste();

    
    ?>

Suponho que assim funcione. Obviamente para estruturas de dados mais complexas pode não ser assim tão linear, mas tas a perceber a ideia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que no php5 não se usa o var..

vou passar a noite a estudar o upgrade de php4 para o 5..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não fazia a mínima ideia que php before v5.0 não corria objectos.

Fica a dica;)

Thnks!

Só não podes correr objectos no PHP 4 utilizando o OO mas podes correr de outra forma...

Ex:

<?php
class a {

        var $abc = 'teste';

        function b () {
                echo $this->abc;
                }

}

$class = new a();

$class->b()

echo $class->abc;
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dar dá, mas não é a forma mais apropriada de "escrever" coisas. Digo eu.

Experimenta assim:

<?php
error_reporting(E_ALL);
class Homem {
    
    public var $nome;
    
    public function teste()
    {
        return "homem";
    }
}


$obj = new Homem();
echo $obj->teste();

    
    ?>

Suponho que assim funcione. Obviamente para estruturas de dados mais complexas pode não ser assim tão linear, mas tas a perceber a ideia.

Acho que esse código esta errado porque no PHP 4 não se pode utilizar public na var nem na função e no PHP 5 não se pode utilizar public seguido de var

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

kingless eu fiz error_reporting(E_ALL) mas os erros não aparecem, preciso de editar algo directamente no php.ini ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Abre o php.ini e procura pela linha "error_reporting = ..." e troca para

error_reporting  =  E_ALL

depois procura por "display_errors =" e troca para

display_errors = On

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que esse código esta errado porque no PHP 4 não se pode utilizar public na var nem na função e no PHP 5 não se pode utilizar public seguido de var

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

Só não podes correr objectos no PHP 4 utilizando o OO mas podes correr de outra forma...(...)

O que é que queres dizer com isso, não poder correr objectos utilizando o OO..?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que é que queres dizer com isso, não poder correr objectos utilizando o OO..?

//Não se pode correr objectos assim

echo ClasseN::Objecto;

//só se pode correr objectos assim

$classeN = new classeN();
echo $classN->Objecto;

Melhor dizendo:


class a {

var $abc = "teste";

function b {

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

}
}

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

$class = new a();
$class->b(); //funciona

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah isso. Por acaso pode-se (desde PHP3, segundo parece), mas mesmo admitindo que não se pudesse, não deixaria de ser "OO". Pormenores.

Mais info.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm, ja vi que te estavas a referir ao "::" (operador "scope resolution") quando falavas em "OO". Esse operador serve apenas para como o nome indica fazer "scope resolution", não deixa de ser programação OO por não se poder usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah isso. Por acaso pode-se (desde PHP3, segundo parece), mas mesmo admitindo que não se pudesse, não deixaria de ser "OO". Pormenores.

Mais info.

Experimenta tu o código para ver se funciona ;)

Hmm, ja vi que te estavas a referir ao "::" (operador "scope resolution") quando falavas em "OO". Esse operador serve apenas para como o nome indica fazer "scope resolution", não deixa de ser programação OO por não se poder usar.

Ninguem disse que deixa de ser programação...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código especificamente não sei se funciona, mas tenho scripts que usam essa funcionalidade.

Bem visto, ninguém disse que deixava de ser programação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :D Estou a falar sobre "CORRER OBJECTOS" utilizando "::" ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Define "correr objectos", sff.

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com o error_reporting em E_ALL nao deu.. pus isto 6181 e agora já dá.. parece que no php 5 é representado assim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora