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

HolyMurderer

[Resolvido] Problema com classes

16 mensagens neste tópico

Boas!

Apesar de ser um bom programador PHP, OOP ainda não domino, mas está na altura de dar o próximo passo :P Basicamente, estou a aprender OOP em PHP5, mas já tenho boas noções teóricas de classes, inheritance, essas coisas, mas falta-me prática, que é o que estou a tentar complementar agora :D

Como tal, tentei seguir alguns tutorials, fiz pequenas coisas, mas há algo que estou a tentar compreender, como tal, coloco aqui este pequeno exemplo:

class produto
{
var $name;
var $price;

function __construct( $name, $price )
{
	$this->$name = $name;
	$this->$price = $price;
}

function info()
{
	return 'The product described as ' . $this->$name . ' costs ' . $this->$price;
}


}


$produto1 = new produto('Samsung ZV10', 100);
echo $produto1->info();

Se alguém correr isto, irão obter erro nas variáveis na linha que diz "return 'The product described as ' . $this->$name . ' costs ' . $this->$price;", pois indica que são variáveis vazias. Pelo que percebi, poderá ter a ver com o 'scope' das variáveis (as variáveis podem não estar a ser bem lidas na função info(), mas sim fora dela apenas...), mas, pelo que vi em exemplos pela net, há quem faça coisas parecidas tal como eu fiz isto... poderá não ser nada de programação e ser algo no php.ini ? Testei a classe com alguns echo's, e as variáveis chegam e são processadas pelo contructor, mas perdem-se na função info() :thumbsup:

Se alguém me puder ajudar a resolver o meu problema, agradecia.

Já agora, se alguém tiver links de bons tutorials de classes de PHP5 e puder dizer, também agradecia.

Abraço e obrigado :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

penso que é _construct e não __construct. Anyway, se não funcionar, em vez do _construct usa produto :thumbsup:

EDIT: e tens outro erro. usa-se $this->name e não $this->$name.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela resposta, mas não, o problema não é esse. O constructor está bem, já testei produto, com um só underscore, não fosse erro meu, mas não é isso... deverá ser algo na info(), nas variáveis, ou no .ini, penso eu...

EDIT: ERA ISSO!!!!!!!!!!!!! LOL  :wallbash: era o $ na propriedade da classe, ao fazer o $this... lolol... agora já tudo funciona certinho :thumbsup:

Obrigadão :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela resposta, mas não, o problema não é esse. O constructor está bem, já testei produto, com um só underscore, não fosse erro meu, mas não é isso... deverá ser algo na info(), nas variáveis, ou no .ini, penso eu...

Vê o meu edit, é mesmo o usares $this->$name e não $this->name
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Vê o meu edit, é mesmo o usares $this->$name e não $this->name

Estranho... $this->name funcionou, mas $this->$name não... afinal qual está correcto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Vê o meu edit, é mesmo o usares $this->$name e não $this->name

Estranho... $this->name funcionou, mas $this->$name não... afinal qual está correcto?

$this->name é o correcto...

Se o valor da variável $name fosse "name" podias chamar $this->$name ... mas o correcto mesmo é $this->name;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, obrigadão então :thumbsup: problema resolvido :P

Gostaria de vos agradecer pelas respostas rápidas, certeiras e explícitas.

Um abraço e mais uma vez, obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma coisa, neste caso podias ter usado a função var_dump() para saberes a estrutura da class.

Ex:

$produto1 = new produto('Samsung ZV10', 100);
var_dump($produto1);

Experimenta e vê o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

dá isto:

object(produto)#1 (2) { ["name"]=>  string(12) "Samsung ZV10" ["price"]=>  int(100) }

Realmente indica algumas coisas úteis, é verdade :P Não conhecia a função, obrigado pela dica :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

dá isto:

object(produto)#1 (2) { ["name"]=>  string(12) "Samsung ZV10" ["price"]=>  int(100) }

Realmente indica algumas coisas úteis, é verdade :D Não conhecia a função, obrigado pela dica :thumbsup:

Se quando o código não tinha funcionado tivesses feito isso, ias ter qq coisa do género:

object(produto)#1 (2) {

["Samsung ZV10"]=>

string(12) "Samsung ZV10"

[100]=>

int(100)

}

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu normalmente n uso a keyword var. Lembro-me de usar em certos casos e aquilo dar erros. Mas nas classes é normal usares as keywords public, private e protected.

As funçoes ou variaveis q n tem nada creio q sao automaticamente postas como public

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu normalmente n uso a keyword var. Lembro-me de usar em certos casos e aquilo dar erros. Mas nas classes é normal usares as keywords public, private e protected.

As funçoes ou variaveis q n tem nada creio q sao automaticamente postas como public

No PHP 4 não se pode usar as keywords public, private e protected só no PHP 5 se pode usar...

Se quiseres criar um script que seja compatível com o PHP 4 e PHP 5 então és obrigado a usar a keyword "var"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas eu como passei para o php5 e no meu server meti la para usar php5 n me chateio com isso. E supostamente se é pa ser compativel mais vale fazer um para o php4 e outro para o php5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E supostamente se é pa ser compativel mais vale fazer um para o php4 e outro para o php5

Depende do tipo de Script/Software que fizeres... por exemplo se estiveres a desenvolver um CMS tipo o Joomla ou um Fórum não vais fazer 1 para PHP 4 e outro para PHP5 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ya. Eu tou a tentar fazer um CMS meu (so memo para ver se consigo fazer e ao mesmo tempo aprender mais de php, javascript, css e mysql) e tou so a fazer para php 5 ;)

Mas tens editores como o FCKeditor que tanto da para php4 como php5, tem memo um class para cada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelas vossas dicas ;)

A questão do var, foi mesmo por compatibilidades, pois nem sempre faço coisas para o meu webserver local, por vezes utilizo webservers em SP's.

Abraço

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