我是PHP的OO概念的新手。我有一个名为MY_ controller的类,它是我的基类。所有类都扩展了这个类。我正在使用MVC架构。我现在在我的系统中使用缓存。所以我在我的基类的构造函数中加载缓存变量。我在我的函数中使用普通的php变量,如$cacheVariable
来存储缓存中的值。我想知道如果我将它作为类参数存储并使用像$this->cacheVariable
那样它是否会提供任何帮助?在每个函数中,我得到像$this->cache->get('cacheVariable');
这样的缓存值,如果我从$this->cacheVariable
答案 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 manual和inheritance section。
答案 2 :(得分:0)
当您仅实例化控制器的一个实例(从主控制器派生)时,它是一个可以想象的解决方案。
答案 3 :(得分:0)
在我看来,更好的想法是直接从缓存服务中获取您在类中所需的任何变量,而不是将其保留为类属性。原因很简单:假设缓存中某些键的值将在您的类之外的其他位置更改(或过期)。如果您将此值作为类属性,则每次访问此值时都需要关注它,但如果从缓存中检索它,则无需关心(因为缓存会关心某些键的值是否未更改或已过期) )。