0

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

4

4 回答 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 回答