Question éditée pour mieux refléter mes besoins.Méthodes de classe parent appel
Prenons l'exemple suivant:
class Base
{
public $Text = null;
public function __construct()
{
$this->Text = new Base_Text();
}
}
class Base_Text extends Base
{
public $Is = null;
public function __construct()
{
$this->Is = new Base_Text_Is();
}
public function CammelCase($string)
{
return trim(str_replace(' ', '', ucwords($string)));
}
}
class Base_Text_Is extends Base_Text
{
public function CammelCase($string)
{
return ($string === $this->CammelCase($string)); // doesn't work
}
}
Comment puis-je fixer la méthode Base_Text_Is::CammelCase()
sans appeler la classe Base_Text statiquement (ne pas utiliser parent::
ou Base_Text::
)?
La seule solution que je suis venu avec pour ce genre de situations est de créer une fonction singleton comme ceci:
function Base()
{
static $instance = null;
if (is_null($instance) === true)
{
$instance = new Base();
}
return $instance;
}
Et changer la méthode Base_Text_Is::CammelCase()
à ceci:
return ($string === Base()->Text->CammelCase($string));
Et pour pour éviter de créer deux instances d'objet de la classe Base, au lieu de:
$base = new Base();
$base->Text->Is->CammelCase('MethodOverloading'); // true
Je fais juste:
Base()->Text->Is->CammelCase('MethodOverloading'); // true
Est-ce une bonne pratique? Y a-t-il d'autres solutions?
Je ne t obtenir votre dernier commentaire dans la réponse de Darrell. Vous n'êtes pas capable d'accéder aux propriétés non statiques de 'Base_Text'? D'où voulez-vous les appeler? Je pense que vous devriez expliquer cela plus en détail. –
@Fixix: J'essaie de garder l'exemple aussi simple que possible, il y a des cas où je ne peux pas appeler une méthode parente de façon statique car cela dépend des propriétés instanciées. –