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

softklin

Classes em PHP com métodos estáticos

9 mensagens neste tópico

Boas pessoal.

Comecei a explorar à pouco tempo o mundo das classes em PHP, e encontrei um pequeno problema numa classe. Quero criar uma classe sem ser preciso instanciá-la, ou seja, apenas usar os seus métodos "directamente". Segue-se a classe com métodos estáticos:

<?php
# Smilies
# Classe que gere todos os smilies 

class Smilies {
	var $smileList = array( ""  =>  "happy.gif", ""  =>  "grin.gif", "");

	public static function getSmilies() {
		return $this->smileList;
	}
}
?>

O que pretendo fazer é noutro ficheiro, após fazer include da classe, é aceder ao método "getSmilies()". Por mais formas que tente aceder ao método de forma "estática", não consigo fazer o método funcionar, tentei assim:

$smilies = Smilies::getSmilies();    //nao funciona: na parte em que é chamada, para baixo fica em branco

$classe = 'Smilies';
$smilies = $classe::getSmilies();  //nao funciona: a pagina que incluo fica toda em branco

Afinal, como se usa um método estático? Em que estou a falhar? Tentei ver a página do PHP http://pt2.php.net/manual/en/language.oop5.static.php mas não obtive muitas respostas. Estou a usar PHP 5.2.6.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que fazer a propriedade smileList static, senão ela só existe quando instanciares um objecto da classe.

Para acederes a essa propriedade dentro da classe propriamente dita usa self::

<?php
class Smilies {
  static private $smileList = array(""  =>  "happy.gif", ""  =>  "grin.gif", "");
  public static function getSmilies() {
    return self::$smileList;
  }
}

$smilies = Smilies::getSmilies();
print_r($smilies);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pmg, a tua solução, juntamente com a declaração:

$smilies = Smilies::getSmilies();

funcionaram em pleno! Obrigado pela tua ajuda, estão tão preocupado com a utilização da função que me esqueci completamente de ver se havia algum problema na classe :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Foi o facto de "de fora" não termos acesso à variável que tem os dados?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tinhas dois erros, o primeiro já to disseram, o outro é que estavas a tentar chamar uma classe usando uma string previamente definida ocmo identificador, isso na verdade é uma feature do PHP para funções, mas não para classes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Foi o facto de "de fora" não termos acesso à variável que tem os dados?

O problema principal foi que estavas a ir buscar o método smileList de forma dinâmica (o ->) que serve para instâncias de classes, e devias ir buscar de forma estática (o ::cheesygrin:.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sabia dessa diferença. Pensei que se podia usar um ou outro em alternativa. Tenho de explorar um bocado melhor estes pormenores da POO em PHP...

Obrigado pelos vossos comentários, pessoal  :cheesygrin:

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