与java中的BeanFactory一样:
在更常见的情况下 BeanFactory本身直接创建 bean通过调用它的构造函数 (相当于调用new的Java代码), class属性指定 要构造的bean的类。 在不太常见的情况下 BeanFactory调用一个静态的,所谓的 在类上创建工厂方法 bean,class属性 指定包含的实际类 静态工厂方法。
注意:这不是工厂方法
$instance = new FactoryClass();
$instance
可以是动态的任何类实例
答案 0 :(得分: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();
答案 1 :(得分:0)
这是世界上最疯狂的网站,但这似乎包含了您想要的内容:http://www.devshed.com/c/a/PHP/Design-Patterns-in-PHP-Factory-Method-and-Abstract-Factory/
查看实际网站的使用示例,但与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;
}
}