abdoulax
Messages postés875Date d'inscriptionsamedi 17 mai 2003StatutMembreDernière intervention22 juin 20121 26 janv. 2010 à 11:07
Alors moi je vois un truc simple que j'attend depuis un moment dans PHP, c'est le ?:
Si j'ai bien compris
var_dump($test?:"yo"); // yo
$test = "lol";
var_dump($test?:"yo"); // lol
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 12 janv. 2010 à 00:59
Salut Sallmbaye,
Non, static, en PHP5.3 ne représente pas uniquement un mot clé désignant une méthode statique : il désigne aussi, grâce au LSB (Late State Binding, cf le lien donné par l'auteur de la source) la classe parente appelée de manière statique (dans une méthode statique). static, dans un contexte statique, est l'équivalent de parent dans un contexte objet.
Ce n'était pas possible avant, PHP5.3 apporte ici une réelle nouveauté : static permet de se référer à la classe parente via une méthode statique, ce qui n'était pas possible avant.
La différence est que new Singleton va tenter d'instancier la classe Singleton, qui est abstraite : en résultera une belle erreur fatale.
sallmbaye
Messages postés1Date d'inscriptionjeudi 7 janvier 2010StatutMembreDernière intervention12 janvier 2010 12 janv. 2010 à 00:52
salut, ban je trouve votre solution assez simpliste mais vous devriez revoir ce syntaxe $instance = new static
dans
# final static public function getInstance()
# {
# static $instance = null;
# return $instance ?: $instance = new static;
# }
je pense que t'a voulu faire new Singleton
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 9 janv. 2010 à 12:25
Je reposte pour la note qui ne semble pas être passée ...
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 9 janv. 2010 à 12:22
Salut,
Ben c'est malin de pondre des sources comme celle ci :$, tu viens de ruiner ma journée et de mettre à la poubelle la class singleton que je m'étais arraché les cheveux à rendre un minimum potable (je ne suis pas expert) ... snif :o)
Rien à dire de plus que ce qui l'a déjà été, j'ai juste modifié à la va vite la méthode clone afin qu'elle lève une exception avec un message explicite.
Bravo !!
Cordialement,
Kohntark-
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 9 janv. 2010 à 11:40
LOL j'avais pas vu la visibilité de la méthode ^^
Hum. Bon. Mais est-ce qu'une exception avec un message d'erreur ne serait pas plus "propre" ? Bon, c'esdt du détail, hein, à ce niveau là ;)
Waredan
Messages postés22Date d'inscriptionvendredi 8 janvier 2010StatutMembreDernière intervention19 février 2010 9 janv. 2010 à 11:35
Oui, le clonage d'un objet à l'aide du mot clé "clone" fait appel à la méthode magique "__clone()" lorsqu'elle est définie dans une classe, ici, ayant une visibilité privée, une erreur fatale sera lancée.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 8 janv. 2010 à 22:05
Salut,
Ca, ça me plaît. N'ayant pas encore PHP5.3 (les distribs Linux tardent à le mettre dans leurs packages et je n'ai pas le courage de l'installer à la main, idem pour FreeBSD), je n'ai pas encore eu le plaisir de développer cette classe... Mais tu l'as fait, et c'est très bien. Parce que c'est con, mais c'est juste pas possible à réaliser en PHP5.2 ... :/
Je ne m'y serais pas pris exactement de la même manière, mais je suppose qu'à l'utilisation, c'est rigoureusement identique.
Juste une interrogation sur ta méthode __clone() : je ne sais pas si, en l'état, elle empêche réellement le clonage (peut-être, je ne sais plus). Ne serait-il pas intéressant de lancer une exception pour l'empêcher réellement ? (je veux dire obliger le développeur à prendre ça en compte pour de vrai).
26 janv. 2010 à 12:38
var_dump(false ?: true); // bool(true)
var_dump(null ?: true); // bool(true)
var_dump(0 ?: true); // bool(true)
var_dump('' ?: true); // bool(true)
26 janv. 2010 à 11:07
Si j'ai bien compris
var_dump($test?:"yo"); // yo
$test = "lol";
var_dump($test?:"yo"); // lol
12 janv. 2010 à 00:59
Non, static, en PHP5.3 ne représente pas uniquement un mot clé désignant une méthode statique : il désigne aussi, grâce au LSB (Late State Binding, cf le lien donné par l'auteur de la source) la classe parente appelée de manière statique (dans une méthode statique). static, dans un contexte statique, est l'équivalent de parent dans un contexte objet.
Ce n'était pas possible avant, PHP5.3 apporte ici une réelle nouveauté : static permet de se référer à la classe parente via une méthode statique, ce qui n'était pas possible avant.
La différence est que new Singleton va tenter d'instancier la classe Singleton, qui est abstraite : en résultera une belle erreur fatale.
12 janv. 2010 à 00:52
dans
# final static public function getInstance()
# {
# static $instance = null;
# return $instance ?: $instance = new static;
# }
je pense que t'a voulu faire new Singleton
9 janv. 2010 à 12:25
9 janv. 2010 à 12:22
Ben c'est malin de pondre des sources comme celle ci :$, tu viens de ruiner ma journée et de mettre à la poubelle la class singleton que je m'étais arraché les cheveux à rendre un minimum potable (je ne suis pas expert) ... snif :o)
Rien à dire de plus que ce qui l'a déjà été, j'ai juste modifié à la va vite la méthode clone afin qu'elle lève une exception avec un message explicite.
Bravo !!
Cordialement,
Kohntark-
9 janv. 2010 à 11:40
Hum. Bon. Mais est-ce qu'une exception avec un message d'erreur ne serait pas plus "propre" ? Bon, c'esdt du détail, hein, à ce niveau là ;)
9 janv. 2010 à 11:35
8 janv. 2010 à 22:05
Ca, ça me plaît. N'ayant pas encore PHP5.3 (les distribs Linux tardent à le mettre dans leurs packages et je n'ai pas le courage de l'installer à la main, idem pour FreeBSD), je n'ai pas encore eu le plaisir de développer cette classe... Mais tu l'as fait, et c'est très bien. Parce que c'est con, mais c'est juste pas possible à réaliser en PHP5.2 ... :/
Je ne m'y serais pas pris exactement de la même manière, mais je suppose qu'à l'utilisation, c'est rigoureusement identique.
Juste une interrogation sur ta méthode __clone() : je ne sais pas si, en l'état, elle empêche réellement le clonage (peut-être, je ne sais plus). Ne serait-il pas intéressant de lancer une exception pour l'empêcher réellement ? (je veux dire obliger le développeur à prendre ça en compte pour de vrai).