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上阅读所有内容,还有其他任何东西).
在这种情况下,似乎有些事情似乎是错误的.
首先,有两个类似的结构用于创建对象:
通常人们不区分这两者,只称他们为"工厂".所以这些是你使用工厂的两种情况.
你现在拥有的东西不符合描述.您正在创建某种数据库连接,然后获取一些数据,然后使用它来创建对象列表.这不是可重复使用的代码.
如果工厂的使用会是这样的话会好得多:
$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)
当然,使用实现此行为的工厂类.
此外,您可能希望观看(假设您还没有看过)关于该主题的两个视频:
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |