Php 关于对象和查找单行的问题
我试图以某种方式坚持面向对象编程的规则。因此,我创建了一个用户类,它处理一个用户。此用户是从db类用户加载的 因此,现在我正在创建一个userManager类,其函数如下:findUserIdByEmail 但是,正确的面向对象方法是什么呢Php 关于对象和查找单行的问题,php,oop,zend-framework,Php,Oop,Zend Framework,我试图以某种方式坚持面向对象编程的规则。因此,我创建了一个用户类,它处理一个用户。此用户是从db类用户加载的 因此,现在我正在创建一个userManager类,其函数如下:findUserIdByEmail 但是,正确的面向对象方法是什么呢 我应该直接从userManager构建一个查询到db,还是应该以某种方式加载所有用户对象并在对象中找到它?我将构建类似于getUserByEmail($email)的东西,它返回完整的对象(有或没有相关对象)。在这种情况下,您可以使用$User->id访问i
我应该直接从userManager构建一个查询到db,还是应该以某种方式加载所有用户对象并在对象中找到它?我将构建类似于
getUserByEmail($email)
的东西,它返回完整的对象(有或没有相关对象)。在这种情况下,您可以使用$User->id访问id(或者更好地为其构建一个好的getter),还可以访问其他属性,而无需对数据库执行其他查询。如果您开始构建函数,如getUserIdByEmail
,您很快就会开始构建方法,如getusernamebyeemail
,getUserPasswordByEmail
,等等。看到问题了吗?。在这种情况下,您可以使用$User->id访问id(或者更好地为其构建一个好的getter),还可以访问其他属性,而无需对数据库执行其他查询。如果您开始构建函数,如getUserIdByEmail
,您将很快开始构建方法,如getusernamebyeemail
,getUserPasswordByEmail
,等等。看到问题了吗?
getUserByEmail($email)
它将调用数据库或任何其他数据存储。基本示例减去转义/安全性
public function getUserByEmail($email)
{
$sql = "SELECT user_name AS username, user_id AS userId FROM User WHERE email_address = ". $email
$result = $this->runQuery($sql);
while($r = $result->getAssoc()){
$user = $this->createUserModel($r);
}
return $user;
}
public function createUserModel($row)
{
$user = new Default_Model_User;
$user->setUsername($row['username']);
$user->setUserId($row['userId']);
return $user;
}
然后,email方法将调用一个方法来创建保存属性的对象并返回它。
getUserByEmail($email)
它将调用数据库或任何其他数据存储。基本示例减去转义/安全性
public function getUserByEmail($email)
{
$sql = "SELECT user_name AS username, user_id AS userId FROM User WHERE email_address = ". $email
$result = $this->runQuery($sql);
while($r = $result->getAssoc()){
$user = $this->createUserModel($r);
}
return $user;
}
public function createUserModel($row)
{
$user = new Default_Model_User;
$user->setUsername($row['username']);
$user->setUserId($row['userId']);
return $user;
}
然后,email方法将调用一个方法,该方法创建保存属性的对象并返回它。我将创建一个与数据库中存储用户的表相对应的类Users。我还将创建一个与存储用户的表结构相对应的简单用户类 表用户将具有getSingleByEmail($theEmail)方法,该方法将返回用户对象,如果该用户不存在,则返回null
class Users
{
public function getSingleByEmail($theEmail)
{
// check that email is valid
// if not throw exception
// get data from the database
// either with bare SQl or with some db wrapper
if (null !== theResult)
{
theResult = new User($theResult);
}
return theResult;
}
}
class User
{
private $id;
private email;
private $username;
public function __construct($theResult)
{
$this->id = theResult->id;
$this->email = theResult->email;
$this->username = theResult->username;
}
}
或者类似的东西。我将创建一个与数据库中存储用户的表相对应的类Users。我还将创建一个与存储用户的表结构相对应的简单用户类 表用户将具有getSingleByEmail($theEmail)方法,该方法将返回用户对象,如果该用户不存在,则返回null
class Users
{
public function getSingleByEmail($theEmail)
{
// check that email is valid
// if not throw exception
// get data from the database
// either with bare SQl or with some db wrapper
if (null !== theResult)
{
theResult = new User($theResult);
}
return theResult;
}
}
class User
{
private $id;
private email;
private $username;
public function __construct($theResult)
{
$this->id = theResult->id;
$this->email = theResult->email;
$this->username = theResult->username;
}
}
或者类似的东西。你说的“使用它”是什么意思?作为输入,作为输出,……你所说的“使用它”是什么意思?作为输入,作为输出。。?