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

use*_*841 1 php oop design-patterns

我有几个类基本上是数据库行的接口.由于该类假定行已经存在(__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 );
Run Code Online (Sandbox Code Playgroud)

这种模式叫什么?


编辑:我将示例更改为具有更多数据库接口功能的示例.在大多数情况下,这种类通常会被实例化__construct().但有时当你需要先创建一个新行时,你会打电话create().

Cri*_*hez 5

我认为这是Factory方法模式.

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

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

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