0

Java の BeanFactory のように:

BeanFactory 自体がそのコンストラクターを呼び出すことによって Bean を直接作成する (Java コードが new を呼び出すのと同じ) より一般的なケースでは、class 属性は、構築される Bean のクラスを指定します。BeanFactory が静的な、いわゆるファクトリ メソッドをクラスで呼び出して Bean を作成する、あまり一般的ではないケースでは、class 属性は静的ファクトリ メソッドを含む実際のクラスを指定します。

注:それはファクトリメソッドではありません

$instance = new FactoryClass();

任意の$instanceクラス インスタンスを動的に指定できます

4

2 に答える 2

1

__autoload を静的メソッドと組み合わせて使用​​できます。これは過度に単純化されています。

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();
于 2010-03-21T06:20:02.150 に答える
0

これは世界で最もくだらないWebサイトですが、これには必要なものが含まれているようです: http ://www.devshed.com/c/a/PHP/Design-Patterns-in-PHP-Factory-Method-and-Abstract-Factory/

使用例については実際のWebサイトを参照してください。ただし、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;
   }
}
于 2010-03-21T05:36:27.793 に答える