存储为类参数或普通的php变量

时间:2012-10-11 17:30:20

标签: php class

我是PHP的OO概念的新手。我有一个名为MY_ controller的类,它是我的基类。所有类都扩展了这个类。我正在使用MVC架构。我现在在我的系统中使用缓存。所以我在我的基类的构造函数中加载缓存变量。我在我的函数中使用普通的php变量,如$cacheVariable来存储缓存中的值。我想知道如果我将它作为类参数存储并使用像$this->cacheVariable那样它是否会提供任何帮助?在每个函数中,我得到像$this->cache->get('cacheVariable');这样的缓存值,如果我从$this->cacheVariable

获得价值,它会有所帮助

4 个答案:

答案 0 :(得分:0)

如果你想在构造函数之外的任何地方使用$ cacheVariable,你会想要使用$ this

public function __construct() {
    //...
    $this->cacheVariable = $this->cache->get('cacheVariable');
    //...
}

另外请记住,如果您希望子类从基类继承此变量,则需要将其设置为public或protected。如果它是私人的孩子将不会继承它。

答案 1 :(得分:0)

当你说“类变量”时,我假设你指的是一个属性(一个实例的属性=。注意区别:

如果你有一个类,比如说MyClassA,那么在你的脚本中你将使用new new来实例化那个类(取决于你的PHP版本,你可以使用自PHP-5.3.0以来改变的另一个constructor syntax) :

<?php
class MY_controller{
  public $cacheVariable;

  // constructor
  function MY_controller($aValue){
     // constructor code which loads cacheVariable, for example with parameter
     $this->cacheVariable = $aValue;
  }

  public function someFunction(){
    //... some code, then access the property
    $cv = $this->cacheVariable;
  }
}

$aController = new MY_controller(42);
?>

当您从MY_controller继承时,该类的每个实例都可以通过$this->cacheVariable访问cacheVariable。

我想澄清的重要一点是它是一个实例属性,而不是一个类。有关PHP中OOP的进一步参考,请参阅properties section in PHP's OOP manualinheritance section

答案 2 :(得分:0)

当您仅实例化控制器的一个实例(从主控制器派生)时,它是一个可以想象的解决方案。

答案 3 :(得分:0)

在我看来,更好的想法是直接从缓存服务中获取您在类中所需的任何变量,而不是将其保留为类属性。原因很简单:假设缓存中某些键的值将在您的类之外的其他位置更改(或过期)。如果您将此值作为类属性,则每次访问此值时都需要关注它,但如果从缓存中检索它,则无需关心(因为缓存会关心某些键的值是否未更改或已过期) )。