2009-10-29 4 views
3
public function __construct($input = null) { 
    if (empty($input)){ 
     return false; 
    } 

et puis il y a un code constructeur ...constructeurs php

ce que je voudrais faire est pour la classe de ne pas initialiser si je passe un vide variables

$ classinstance = new MyClass () Je veux que $ classinstance soit vide (ou faux)

Je pense que ce n'est pas possible comme ceci, Quelle est une manière facile d'obtenir un résultat similaire?

Répondre

5

Vous pouvez rendre privé le constructeur normal (donc il ne peut pas être utilisé de l'extérieur de l'objet, comme si vous faisiez un Singleton) et créer un Factory Method.

class MyClass { 
    private function __construct($input) { 
     // do normal stuff here 
    } 
    public static function factory($input = null) { 
     if (empty($input)){ 
      return null; 
     } else { 
      return new MyClass($input); 
     } 
    } 
} 

Ensuite, vous instancier une classe comme ceci:

$myClass = MyClass::factory($theInput); 

(EDIT: maintenant en supposant que vous essayez seulement de soutenir PHP5)

+1

bonne explication supplémentaire. – jheddings

+0

Up-votes sont appréciés :) – philfreo

+0

aurais-je encore besoin de __construct? – Daniel

1

Vous pouvez utiliser une méthode de fabrication pour créer la objet:

private function __construct($input = null) { 
} 

public static function create($input = null) { 
    if (empty($input)) { 
     return false; 
    } 
    return new MyObject($input); 
}  
+0

Je vous ai battu par 3 secondes :) – philfreo

+0

Grands esprits ... :) – jheddings

+1

et je crois que votre méthode de création devrait être une méthode statique, comme dans ma solution. – philfreo

0

Je crois que vous avez raison. Un print_r de votre nouvel objet montrera qu'il retourne un objet.

Vous pourriez le faire jeter une exception, mais ce n'est probablement pas le style que vous voulez.

+1 sur les méthodes d'usine déjà affichées. Ces méthodes d'usine pourraient aussi être comme:

public static function newCreate($a) { return (!$a) ? false : new foo($a); } 

J'aime les méthodes d'usine :-)