在 C 语言中,我们可以这样做(如果我没记错的话):
void foo()
{
static bool firstCall = true;
if(firstCall)
{
// stuff to do on first call
firstCall = false;
}
// more stuff
}
我想在 PHP 中这样做,以避免我的模型在多次调用同一方法时多次查询数据库。
class User
{
public static function & getAll($reload = false)
{
static $result = null;
if($reload && null === $result)
{
// query the database and store the datas in $result
}
return $result;
}
}
是否允许?行得通吗?它与 PHP < 5.3 兼容吗?
如果是,那么我还有另一个问题:
假设我们有几种所有模型共有的方法,我会将它们分组到一个抽象基类中:
abstract class AbstractModel
{
public static function & getAll($tableName, $reload = false)
{
static $result = array();
if($reload && !isset($result[$tableName]))
{
// query the database depending on $tableName,
// and store the datas in $result[$tableName]
}
return $result[$tableName];
}
}
class User extends AbstractModel
{
public static function & getAll($reload = false)
{
$result = parent::getAll('users', $reload);
return $result;
}
}
class Group extends AbstractModel
{
public static function & getAll($reload = false)
{
$result = parent::getAll('groups', $reload);
return $result;
}
}
这也行吗?可以改进吗?
谢谢你的帮助 :)