Etendre une classe pour en faire un singleton

Etendre une classe pour en faire un singleton - PHP - Programmation

Marsh Posté le 26-11-2008 à 16:49:30    

Salut,
 
j'ai une classe qui fait des trucs et sa petite soeur qui est spécialisée et qui doit être un singleton.
Pour le singleton je ne sais pas assurer que personne ne va pas faire un new à la place du getInstance donc j'ai voulu mettre mon construct en private.  
 
Et la, c'est le drame  :(  
 
Fatal error: Access level to Fred::__construct() must be public (as in class Human)
 
Pourquoi on ne peut pas faire cela ?
 
 
Et je ne peux pas mettre mon constructeur de ma classe mère en private.

Reply

Marsh Posté le 26-11-2008 à 16:49:30   

Reply

Marsh Posté le 26-11-2008 à 17:02:26    

protected ?

Reply

Marsh Posté le 27-11-2008 à 08:24:10    

"must be public"  :D  
 
Donc la question est :
pourquoi ne peut on pas étendre une classe en mettant son constructeur en privé alors que dans la classe mère il est en public ?
 
C'est comme ça dans les autres languages ?

Reply

Marsh Posté le 27-11-2008 à 12:17:22    

L'héritage n'est typiquement pas la bonne solution pour ton problème, là...utilise la composition.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 27-11-2008 à 17:41:02    


 
mais protected étend l'accès aux classes filles.

Reply

Marsh Posté le 27-11-2008 à 17:55:53    


il s'en branle, la classe mère a un constructeur public.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 27-11-2008 à 18:03:25    

ok mais j'ai pas compris ce qu'il veut  :pt1cable:  
 
Forcer l'utilisation de getInstance ?
 

Code :
  1. $obj = Class::getInstance();

Reply

Marsh Posté le 27-11-2008 à 18:52:05    

Il veut faire un singleton qui hériterait des fonctionnalités de sa classe "mère", laquelle a un constructeur public.
La solution est la composition, ie un singleton qui contient une instance de la classe "mère", et tu forwardes toutes les fonctionnalités dont tu as besoin...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 27-11-2008 à 18:53:29    

ok... :jap:


Message édité par Profil supprimé le 27-11-2008 à 18:53:41
Reply

Marsh Posté le 27-11-2008 à 22:59:26    

ouais y a juste un ptit soucis dans la compo, c'est que je dois déclarer toutes les méthodes de l'autre classe dedans.

Reply

Marsh Posté le 27-11-2008 à 22:59:26   

Reply

Marsh Posté le 28-11-2008 à 07:19:21    


ah ben ça...[:joce]
Sinon tu profites des raccourcis crados de php et tu fais ça via __call [:chrisbk]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 28-11-2008 à 10:00:47    

skeye a écrit :


 
et tu fais ça via __call [:chrisbk]


c'est exactement ce à quoi je pensais  [:z800]

Reply

Marsh Posté le 28-11-2008 à 17:54:13    

skeye a écrit :


ah ben ça...[:joce]
Sinon tu profites des raccourcis crados de php et tu fais ça via __call [:chrisbk]


 
 [:bouliyaanisqatsi]

Reply

Marsh Posté le 28-11-2008 à 18:24:18    


bah oui c'est crado...:o


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed