我有以下PHP类:
user.php的
<?php
class User {
public $id;
public $name;
}
?>
Forummessage.php
<?php
class Forummessage {
public $id;
public $user_id; // message coming from this user
public $message;
public $datetime;
// Additionally, an object should be able to get the user instances
public $user; // should be instance of User
}
?>
当然,类属性通常是私有的,可以使用公共setter / getters访问。为了让这个例子尽可能简单,我公开了一切。
此外,假设以下MySQL表。
用户
id name
------------
1 tester
2 anyuser
...
forummessage
id user_id message datetime
---------------------------------------------
1 1 hello... 2014-04-04 12:00:00
2 2 yoyo... 2014-04-04 12:00:10
...
使用所有属性获取Chatmessage数组的最快且最高效的方法是什么?
现在,我有一个使用此方法的PDO包装类:
/**
* Performs a query to the database and returns the desired type
* @param string $statement the pdo query
* @param array $params the params
* @param string $returntype optional param (default: 'bool'), should be either 'bool', 'array' or a valid class name
* @return bool|array returns either a bool depending on the success of the query or an array with the resulting data
*/
function query($statement, $params = array(), $returntype = 'bool');
如果我将有效的类名称传递为$returntype
,则此方法使用$stmt->fetchAll(\PDO::FETCH_CLASS, $returntype);
以返回类实例数组。
我就是这样做的:
// Automatically generates an array of Forummessage
$arrayOfForummessage = $wrapper->query('
SELECT
forummessage.id AS id, // NOTE: I MAKE SURE THE PROPERTIES MATCH TO THE PHP CLASS
user_id AS user_id,
message
datetime,
name AS user_name // NOTE: NOT USED YET
FROM user, forummessage
WHERE user.id = forummessage.user_id
', array(), 'Forummessage');
这很有效,但您可以理解,user
属性仍为NULL
。您如何确保提供用户属性?如您所见,数据位于查询中。
当然,我可以在Forummessage
构造函数中创建一个for循环并查找正确的属性,以便填充创建User
的实例并将其分配给Forummessage
阶级财产。问题是,当拥有许多属性和许多对象时,这确实很慢。如果您有任何建议,我很想了解更多关于它们的信息。