Page 1 sur 2

(error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:37
par jcpans
Bonjour,
Le code suivant :
abstract class Toto {
	public static abstract function test();
	
	public static function test2() {
		self::test();
	}
}
 
class Titi extends Toto {
	public static function test() {
		echo 'dans la classe Titi';
	}
}
 
Titi::test2();
Provoque l'erreur suivante
Fatal error: Cannot call abstract method Toto::test() in ...
Je suis sous PHP 5.3.1, est ce que c'est une erreur de conception ou un bug ?


Merci d'avance

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:40
par stealth35
met toi en erreur E_ALL | E_STRICT et tu comprendras :wink:

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:41
par mere-teresa
Ton erreur vient de là :

Code : Tout sélectionner

self::test();
Tu viens de déclarer test() en méthode abstraite et tu l'appelles :) erreur de conception.

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:43
par stealth35
Ton erreur vient de là :

Code : Tout sélectionner

self::test();
Tu viens de déclarer test() en méthode abstraite et tu l'appelles :) erreur de conception.
Strict Standards: Static function Toto::test() should not be abstract
:wink:

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:47
par jcpans
merci
met toi en erreur E_ALL | E_STRICT et tu comprendras :wink:
rien ne change

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:48
par jcpans
Ton erreur vient de là :

Code : Tout sélectionner

self::test();
Tu viens de déclarer test() en méthode abstraite et tu l'appelles :) erreur de conception.
oui je l'ai implémenté dans le classe class Titi.

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:48
par stealth35
merci
met toi en erreur E_ALL | E_STRICT et tu comprendras :wink:
rien ne change

si ca te dis que tu peux pas faire du abstract sur une function static

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 16:49
par mere-teresa
Strict Standards: Static function Toto::test() should not be abstract
Moui mais jcpans aurait pu croire que son utilisation des méthodes abstraites et de l'héritage était incorrect avec juste le message d'erreur. Alors que le souci ne concerne pas l'héritage du tout.

Si tu es en PHP 5.2, c'est pas possible de cumuler abstract et static. (source : h[url]ttp://php.net/manual/fr/migration52.incompatible.php[/url])
En PHP 5.3 cela change de nouveau :D

Sinon, on peut p-ê t'aider en conception ?

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:01
par stealth35
Si tu es en PHP 5.2, c'est pas possible de cumuler abstract et static. (source : h[url]ttp://php.net/manual/fr/migration52.incompatible.php[/url])
En PHP 5.3 cela change de nouveau :D
non c'est pareil :roll:

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:03
par mere-teresa
:roll:
Cela dit stealth35, peux tu lui expliquer pourquoi c'est une erreur de conception ?

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:07
par mere-teresa

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:18
par stealth35
:roll:
Cela dit stealth35, peux tu lui expliquer pourquoi c'est une erreur de conception ?
oui, parce que self déjà c'est uniquement la classe ou il est définie, et en plus on appelle pas un méthode abstraite définie dans la même classe

si tu veux faire ton truc ca serait
interface iToto
{
    public static function test();
}
    
abstract class  Toto implements iToto
{           
    public static function test2()
    {
        $class = get_called_class();
        $class::test();
    }
}
     
class Titi extends Toto
{
    public static function test()
    {
        echo 'dans la classe Titi';
    }
}
    
Titi::test2();
//dans la classe Titi

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:29
par jcpans
meri à tous
@stealth35 j'ai posté la reponse sur developpez

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:32
par jcpans
dites y a t il des tuts à lire pour ne plus faire ce genre d'erreur ?

Re: (error:Cannot call abstract met)erreur de conception ou bug?

Posté : 26 mai 2010, 17:36
par stealth35
dites y a t il des tuts à lire pour ne plus faire ce genre d'erreur ?
tu peux déjà commencer par ca : http://fr2.php.net/manual/fr/language.oop5.php

tien d'ailleurs en lisant la on peux faire direct avec "static" exemple 2 (http://fr2.php.net/manual/fr/language.o ... ndings.php)
du coup
abstract class Toto implements iToto
{           
    public static function test2()
    {
        static::test();
    }
}