Réponse acceptée !
Salut,
En gros après quelques recherche ca revient à faire return new my_class()
C'est effectivement le cas, dans ce cadre là self permet de référer à la classe courrante (cf
Late Static Bindings).
Donc pourquoi créer la class par "l'interieur" en faisant comme ca:
[...]
que plutôt utiliser un constructeur public et créer la class par "l'exterieur"
Comme ça je vois deux raisons. La première, qui se rencontre souvent mais n'est pas applicable dans le cas présent, est de faire un
singleton. La seconde est de contourner certaines limitations de php 5.3 (la version 5.4 de php corrigera ce problème). Un exemple de limitation et l'utilisation de cette construction "externe" pour contourner :
Code PHP :
<?php
class Toto
{
public static function forge()
{
return new static();
}
public function foo()
{
return 42;
}
public function __toString()
{
return 'bar';
}
}
//$val = new Toto()->foo();
$val = Toto::forge()->foo();
//echo 'Test: ' . new Toto() . PHP_EOL;
echo 'Test: ' . Toto::forge() . PHP_EOL;
?>
En commentaire ce que l'on souhaitais faire et qui ne fonctionne pas dans les versions antérieurs à 5.4 de php. Juste en dessous la manière de contourner.