自我创造者:这是什么模式? PHP

时间:2010-05-10 15:28:24

标签: php design-patterns oop

我有几个基本上是数据库行接口的类。由于该类假定行已存在(__construct需要字段值),因此有一个公共静态函数允许创建行并返回该类的实例。

这是一个伪代码(因此存在错误和缺失的改进)示例:

class fruit {

        public $id;

        public function __construct( $id ) {

                if ( ! is_numeric($id) ) {
                    throw new Exception("Id is not numeric.");
                }
                $this->id = $id;
            $sql = "SELECT * FROM Fruits WHERE id = $id";
            ...
            $this->arrFieldValues[$field] = $row[$value];
        }

    public function __get( $var ) {
        return $this->arrFieldValues[$var];
    }

    public function __set( $var, $val ) {
        $sql = "UPDATE fruits SET $var = " .  mysql_real_escape_string($val) . " WHERE id = $this->id";
    }

        public static function create( $fruit ) {

        $sql = "INSERT INTO Fruits ( fruit_name ) VALUE ( '" mysql_real_escape_string($fruit) . "' )";
        $id = mysql_insert_id();        
        $fruit = & new fruit($id);
            return $fruit;

        }
}

$obj1 = fruit::create( "apple" );
$obj2 = & new fruit( 12 );

这种模式叫什么?


编辑:我将示例更改为具有更多数据库接口功能的示例。在大多数情况下,这类课程将通过__construct()正常实例化。但有时当您需要先创建新行时,您可以调用create()

2 个答案:

答案 0 :(得分:5)

我认为这是Factory method pattern

  

工厂方法模式是一种面向对象的设计模式,用于实现工厂的概念。

     

与其他创作模式一样,它处理创建对象(产品)的问题,而不指定将要创建的确切对象类。工厂方法设计模式通过定义用于创建对象的单独方法来处理此问题,然后子类可以覆盖以指定将要创建的产品的派生类型。

     

在设计模式的范围之外,术语工厂方法也可以指工厂的方法,其主要目的是创建对象。

答案 1 :(得分:0)

由于这与数据库有关,我认为这与可能被称为 Data Mapper 的内容很接近。

如果您在PHP中寻找类似的内容,请转到Propel ORM。看看第一个例子:它几乎是你的代码!