我是 PHP 中 OO 概念的新手。我有一个名为 MY_ 控制器的类,它是我的基类。所有类都扩展了这个类。我正在使用 MVC 架构。我现在在我的系统中使用缓存。所以我在我的基类的构造函数中加载缓存变量。我$cacheVariable
在我的函数中使用普通的 php 变量来存储缓存中的值。我想知道如果我将它存储为类参数并使用它是否会提供任何帮助$this->cacheVariable
?在每个函数中,我都会获得缓存值$this->cache->get('cacheVariable');
,如果我从中获得值会有帮助吗$this->cacheVariable
问问题
320 次
4 回答
0
如果您希望能够在除构造函数之外的其他任何地方使用 $cacheVariable,您将需要使用 $this
public function __construct() {
//...
$this->cacheVariable = $this->cache->get('cacheVariable');
//...
}
另请记住,如果您希望您的子类从您的基类继承此变量,您需要将其设置为公共或受保护。如果它是私有的,孩子将不会继承它。
于 2012-10-11T17:37:24.007 回答
0
当您说“类变量”时,我假设您指的是属性(实例的属性=。请注意区别:
如果你有一个类,比如 MyClassA,那么在你的脚本中你将使用操作符 new 来实例化这个类(根据你的 PHP 版本,你可以使用自 PHP-5.3.0 以来改变的不同的构造函数语法):
<?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
.
我想澄清的重要一点是它是一个实例属性,而不是一个类。有关 PHP 中 OOP 的进一步参考,请参阅PHP 的 OOP 手册中的属性部分和继承部分。
于 2012-10-11T17:41:30.600 回答
0
当您仅实例化控制器的一个实例(从主控制器派生)时,这是一个可以想象的解决方案。
于 2012-10-11T17:42:35.480 回答
0
在我看来,更好的想法是直接从缓存服务中获取变量,而不是将其保留为类属性。原因很简单:假设缓存中的某个键的值将在您的班级以外的其他地方更改(或过期)。如果您将此值作为类属性,则每次访问此值时都需要密切关注它,但如果您从缓存中检索它,您就不会关心(因为缓存会关心某个键的值是否未更改或过期)。
于 2012-10-11T17:44:52.467 回答