[英]Is is possible to create a factory class in PHP?
就像Java中的BeanFactory:
在更常见的情况下,BeanFactory本身通过调用其构造函数直接创建Bean(相当于调用new的Java代码),class属性指定了要构造的Bean的类。 在不常见的情况下,BeanFactory在类上调用静态的所谓工厂方法来创建Bean时,class属性指定包含静态工厂方法的实际类。
注意:这不是出厂方法
$instance = new FactoryClass();
$instance
可以是动态的任何类实例
您可以将__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();
这是世界上最糟糕的网站,但这似乎包含您想要的内容: 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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.