double : quel signification ?

Mammouth du PHP | 19672 Messages

05 nov. 2006, 19:05

Si tu as des méthodes statiques dans ta classe et tu peux vouloir les utiliser depuis l'extérieur : mais ces méthodes peuvent éventuellement faire appel à des méthodes privées de cette même classe : si elle ne sont pas statiques aussi, tu n'y auras pas accès du tout (en théorie). En pratique, ça fonctionne, mais selon les standards stricts PHP5, tu vas avoir une erreur :
<?php
class maclasse
{
    public static function mafonction1()
    {
        try
        {
           $retour = maclasse::mafonction2();
        }
        catch (Exception $e)
        {
            $retour = $e;
        }
        return $retour;
    }
    
    private static function mafonction2()
    {
        return true;
    }

    public static function mafonction3()
    {
        try
        {
           $retour = maclasse::mafonction4();
        }
        catch (Exception $e)
        {
            $retour = $e;
        }
        return $retour;
    }
    private function mafonction4()
    {
        return true;
    }
}

/* Utilisation */
$r1 = maclasse::mafonction1();
if(is_bool($r1))
{
    $val1 = (true === $r1) ? "reussi" : "raté";
}
else
{
    $val1 = $r;
}
echo("<p>Premier appel : ". $val1 ."</p>\n");

$r2 = maclasse::mafonction3();
if(is_bool($r2))
{
    $val2 = (true === $r2) ? "reussi" : "raté";
}
else
{
    $val2 = $r;
}
echo("<p>Second appel : ". $val2 ."</p>\n");
?>
Ce code va afficher ce qui suit :
Premier appel : reussi

Strict Standards: Non-static method maclasse::mafonction4() should not be called statically in C:\Program Files\Visicom Media\WebExpert 6\usager\tmp9864.html on line 42
Second appel : reussi
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

lézard
Invité n'ayant pas de compte PHPfrance

05 nov. 2006, 20:08

Merci de ton explication et de ton code, je suis un peu embrouillé, mais je commence à comprendre de mieux en mieux.

Par contre j'ai testé ton code, et je n'ai pas l'erreur que tu as, mon error_reporting est à E_ALL

Il représente quoi le $e dans le try ? :oops: