理解PHP中的设计模式和OOP

Mal*_*xxl 1 php oop design-patterns factory-pattern

我是一个很新的PHP,并试图学习.我有2个类似的课程.我想在传递count和object类型时创建那些对象.我读了一些关于工厂模式的文章 这是我的工厂类:

    class AssetFactory
    {
        private static $table;
        public static $objects = array();
        public static function Create($asset,$count)
        {

            switch ($asset) {
            case "Item":
                self::$table = "items";
                break;
            case "Job":
                self::$table = "jobs";
                break;
            }
                $db = new Database();
                $rows = $db->query("SELECT * FROM ".self::$table." LIMIT ".$count);

                foreach($rows as $row)
                {
                    self::$objects[] =  new $asset($row);
                }

            return self::$objects;
         }
    }
Run Code Online (Sandbox Code Playgroud)

当我需要5件物品时我会使用:

  $myItems = AssetFactory::Create('Item',5);
Run Code Online (Sandbox Code Playgroud)

当我需要一些我使用的工作时:

  $myJobs= AssetFactory::Create('Job',5);
Run Code Online (Sandbox Code Playgroud)

项目和工作是类似的课程.我的问题就在这里,正如我所说,我试图学习.我这样做对吗?我了解工厂模式吗?有关于此的任何好文件(我在php.net上阅读所有内容,还有其他任何东西).

ter*_*ško 6

在这种情况下,似乎有些事情似乎是错误的.

首先,有两个类似的结构用于创建对象:

  • 工厂:如果对象需要某种初始化才能发布"消费"
  • 构建器:如果在创建对象之前,您必须创建一堆其他对象

通常人们不区分这两者,只称他们为"工厂".所以这些是你使用工厂的两种情况.

你现在拥有的东西不符合描述.您正在创建某种数据库连接,然后获取一些数据,然后使用它来创建对象列表.这不是可重复使用的代码.

如果工厂的使用会是这样的话会好得多:

$connection = new PDO( .. blah.. );
$stmt = $connection->query( 'SELECT * FROM '.$type.' LIMIT '.$count );
$factory = new Factory;
$collection = $factory->buildCollection( $type, $stmt->fetchALL(PDO::FETCH_ASSOC) );
Run Code Online (Sandbox Code Playgroud)

当然,使用实现此行为的工厂类.

此外,您可能希望观看(假设您还没有看过)关于该主题的两个视频: