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

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à :
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à :
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

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

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à :
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

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

non c'est pareil

Re: (error:Cannot call abstract met)erreur de conception ou bug?
Posté : 26 mai 2010, 17:03
par mere-teresa

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

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();
}
}