Bonjour à tous,

je viens du monde Java et j'avoue être un peu bloqué sur un truc qui paraît pourtant tout con. J'aurais aimé que l'un d'entre vous m'explique où je fais fausse route.

Voila le problème : j'ai deux classes, une classe Logger avec une méthode d'instanciation statique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
    define("TRACE", 0);
    define("DEBUG", 1);
    define("INFO",  2);
    define("WARN",  3);
    define("ERROR", 4);
    define("FATAL", 5);
    define("OFF",   9);
 
    class Logger
    {       
        const mask   = "[%s][%s][%s] %s<br>";
 
        private $className  = NULL;
        private $debugLevel = NULL;
 
        private static $dateFormat = "d/m/Y H:i:s";
 
        private function __construct($className, $debugLevel)
        {
            $this->className  = $className;
            $this->debugLevel = $debugLevel;
        }
 
        public static function getLogger($className = NULL, $debugLevel = OFF)
        {
            $c = __CLASS__;
            return new $c($className, $debugLevel);
        }
 
        ...
?>
et une autre classe qui doit disposer d'une propriété de ce type, partagée par toutes les instances de cette classe (donc statique ?).

Voici son code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<?php
    include_once("Logger.class.php");
 
    class MaClasse
    {
        protected static $logger = Logger::getLogger(__CLASS__,INFO);
        ....
    }
Le problème, je pense c'est que l'opérateur :: est apparu après PHP 5.1.
Pas de souci, me dis-je, je vais donc utiliser call_user_func(), mais sans succès

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<?php
    include_once("Logger.class.php");
 
    class MaClasse
    {
        protected static $logger = call_user_func("Logger","getLogger",__CLASS__,INFO);
        ....
    }
Quelqu'un peut-il me dire où se situe mon erreur ?

D'avance merci