2010-03-21 7 views
0

Comme le BeanFactory en java:Est-il possible de créer une classe d'usine en PHP?

Dans le cas beaucoup plus fréquent où le BeanFactory se crée directement le grain en appelant son constructeur (équivalent au code Java appelant nouveau), l'attribut class spécifie la classe de la fève à construire. Dans le cas moins fréquent, où la BeanFactory appelle une méthode statique, que l'on appelle usine sur une classe pour créer le haricot, l'attribut class spécifie la classe réelle contenant la méthode d'usine statique.

Note: ce n'est pas la méthode d'usine

$instance = new FactoryClass(); 

Le $instance peut être une instance de classe dynamique

+0

Juste Pour votre information. Je vous donnais les outils pour mettre en place une classe d'usine. Bonne chance. – cletus

+0

Mais ce n'est pas la classe d'usine.Je suis maintenant convaincu qu'il est impossible de créer une classe d'usine décent en PHP – user198729

Répondre

0

Ce sont les mondes du site plus pourries, mais cela semble contenir ce que vous voulez: http://www.devshed.com/c/a/PHP/Design-Patterns-in-PHP-Factory-Method-and-Abstract-Factory/

Voir le site Web actuel pour des exemples d'utilisation, mais plus ou moins similaire à l'usine java.


// define abstract 'ArrayFactory' class 
abstract class ArrayFactory{ 
    abstract public function createArrayObj($type); 
} 

// define concrete factory to create numerically-indexed array 
objects 
class NumericArrayFactory extends ArrayFactory{ 
    private $context='numeric'; 
    public function createArrayObj($type){ 
    $arrayObj=NULL; 
    switch($type){ 
     case "uppercase"; 
     $arrayObj=new UppercasedNumericArrayObj(); 
     break; 
     case "lowercase"; 
     $arrayObj=new LowercasedNumericArrayObj(); 
     break; 
     default: 
     $arrayObj=new LowercasedNumericArrayObj(); 
     break; 
    } 
    return $arrayObj; 
    } 
} 

// define concrete factory to create associative array objects 
class AssociativeArrayFactory extends ArrayFactory{ 
    private $context='associative'; 
    public function createArrayObj($type){ 
    $arrayObj=NULL; 
    switch($type){ 
     case "uppercase"; 
     $arrayObj=new UppercasedAssociativeArrayObj(); 
     break; 
     case "lowercase"; 
     $arrayObj=new LowercasedAssociativeArrayObj(); 
     break; 
     default: 
     $arrayObj=new LowercasedAssociativeArrayObj(); 
     break; 
    } 
    return $arrayObj; 
    } 
}
+0

Semble trop compliqué, existe-t-il une version simplifiée? – user198729

1

Vous pouvez utiliser __autoload combiné à une méthode statique. C'est trop simplifié.

MyObject.php:

<?php 
class MyObject 
{ 
    public static function Create() 
    { 
     return new MyObject(); 
    } 

    public function hello() 
    { 
     print('hello!!!'); 
    } 
} 

index.php

<?php 
function __autoload($className) 
{ 
    require_once($className . '.php'); 
} 

$o = MyObject::Create(); 
$o->hello(); 
Questions connexes