从类方法返回值

时间:2014-06-30 08:32:50

标签: php class oop design-patterns

我认为这是一个愚蠢的问题 - 但我无法完全掌握它:(

假设我有一个名为Categories的类,它有一个名为getCategories()

的函数
class Categories
{

  function __construct()
  {

  }

  function getCategories()
  {
    //sql to get all categories from db 
    return $categories;
  }
}

在其他课程中,我会做类似的事情:

$cats = new Categories();
$cats->getCategories();

现在我的问题是,我需要在很多地方使用这些类别。那么,如果我创建一个名为$cats的变量作为categories类的成员并将其加载到构造函数中并在任何人调用getCategories()时将其传回来,该怎么办?

class Categories
{
  var $cats; 

  function __construct()
  {
     $this->cats = $this->getCategories(); 
  }

  function getCategories()
  {
    //return loaded class variable instead of running db query again
    return $this->cats;
  }
}

这样,每次有人请求类别时,我都不需要访问数据库。这种做法好吗?坏?我应该这样做还是每次坚持使用db查询?

2 个答案:

答案 0 :(得分:1)

  

这样,每次有人请求类别时,我都不需要访问数据库。这种做法好吗?坏?我应该这样做还是每次坚持使用db查询?

这完全取决于您的类别属性的性质。例如,你把它们拉下来后会改变吗?如果是这样,那么当您最初创建类并且从不再次访问数据库时进行缓存可能意味着使用陈旧数据,这可能对您不利或者可能不是。

另一方面,如果它们是相当静态的并且很少改变,那么在第一次访问时缓存它们可能是更好的选择,例如。

function getCategories()
{
    if (!isset($this->cats)) {
        $this->cats = // load from DB
    }
    return $this->cats;
}

答案 1 :(得分:0)

一切都很好,但var已被弃用,您应该使用publicprivateprotected