J'utilise PHP 5.2.14 et PearLog 1.12.3. La dernière documentation du singleton method in Log.php (PEARLog) déclare:Retour d'une référence à un objet en PHP
Vous devez appeler cette méthode avec la $ var = & Log :: syntaxe singleton(). Sans l'esperluette (&) devant le le nom de la méthode, vous n'obtiendrez pas de référence ; vous obtiendrez une copie.
Cependant, cela génère donc l'avertissement suivant:
AVIS STRICT: Seules les variables doivent être affectées par référence
La source de cette fonction est:
public static function singleton($handler, $name = '', $ident = '',
$conf = array(), $level = PEAR_LOG_DEBUG)
{
static $instances;
if (!isset($instances)) $instances = array();
$signature = serialize(array($handler, $name, $ident, $conf, $level));
if (!isset($instances[$signature])) {
$instances[$signature] = Log::factory($handler, $name, $ident,
$conf, $level);
}
return $instances[$signature];
}
Si je retire la & et utiliser simplement:
$var = Log::singleton()
alors je ne reçois l'avertissement. En outre, si je le fais
$var = Log::singleton();
$var2 = Log::singleton();
alors $ var === var2 évalue à vrai.
Question: Quelle est correcte: la documentation de l'API ou l'avertissement? (Si la fonction retourne un objet, n'est-ce pas une référence?) Pourquoi ai-je besoin de l'esperluette
Peut-être que c'est écrit pour la compatibilité là-bas. Donc, si vous avez PHP4, ça ira et si vous avez PHP5 ça ira aussi. – Eugene
Ce n'est pas la documentation officielle pour le paquet PEAR_Log qui est lié à http://pear.php.net/package/Log/docs et est disponible à http://www.indelible.org/php/Log/guide .html. La documentation n'indique pas que vous devez utiliser le modèle singleton pour obtenir un objet Log. – kguest
@kguest: le lien que j'ai fourni est le premier que j'ai trouvé, mais ce n'est pas pertinent. La citation provient du code source réel. Ne peut pas être plus autoritaire que cela. Et ma question ne concerne pas l'utilisation du pattern singleton, mais la documentation de la méthode singleton de Log. – JRL