php – 对象集合类与否
发布时间:2020-12-13 16:44:18 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试决定是否为我的应用程序/数据库中的每种内容类型创建许多类,或者只是坚持使用过程代码. 版本1: 为每个对象集合创建一个类: class App{ protected $user_collection; function getUserCollection(){ if(!isset($this-user_collection) $this-user
|
我正在尝试决定是否为我的应用程序/数据库中的每种内容类型创建许多类,或者只是坚持使用过程代码.
版本1: >为每个对象集合创建一个类: class App{
protected $user_collection;
function getUserCollection(){
if(!isset($this->user_collection)
$this->user_collection = new UserCollection($this);
return $this->user_collection;
}
// ...
}
class UserCollection{
function __construct(App $app){
$this->app = $app;
}
function getUser($user){
return new User($this->app,$user);
}
function getUsers($options){
$users = $this->app->getDatabase()->query($options);
foreach($users as &$user)
$user = new User($this,$user);
return $users;
}
// ...
}
我用的是: $app = new App();
echo $app->getUserCollection()->getUser('admin')->email_address;
版本2: >将所有方法保存在一个类中 class App{
function getUsers($options){
$users = $this->getDatabase()->query($options);
foreach($users as &$user)
$user = new User($this,$user);
return $users;
}
function getUser($user){
return new User($this,$user);
}
// ...
}
用过: $app = new App();
echo $app->getUser('admin')->email_address;
版本3: >使getUsers()成为“User”类中的静态方法(该方法实例化一个新的User对象): $app = new App(); echo User::getUser($app,'admin')->email_address; 我该走哪条路? “用户”对象只是一个例子,App也有其他对象,如“数据库”,“页面”等. 解决方法
Personnaly,我经常使用第二个方法,如下所示:
class user {
/**
* Load object from ...
*/
public function load($userId) {}
/**
* Insert or Update the current object
*/
public function save() {}
/**
* Delete the current object
*/
public function delete() {
// delete object
// Reset ID for a future save
$this->UserID = null;
}
/**
* Get a list of object
*/
public static function getList() {
// Make your search here (from DB)
// Put rows into new "SELF" object
$list = array();
foreach($rows as $row) {
$obj = new self();
$obj->populate($row);
$list[$obj->UserID] = $obj; // Associative array or not...
}
}
}
就像你可以看到的那样,我将我的“getList”函数设置为static,只需像这样访问: $listUsers = user::getList(); 好的,它非常简单,但在大多数情况下工作简单的应用程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
