【问题标题】:Accessing Static variables in cakephp在 cakephp 中访问静态变量
【发布时间】:2014-12-01 07:21:13
【问题描述】:

Cakephp V2.6

在我当前的项目中,我正在尝试利用一些面向对象的功能。在我的模型中,我创建了一个自定义查找方法来以特定方式检索结果。然后我将此数组返回给控制器并将其提供给视图。

我正在实现一个 excel 插件来导出数据,并且有问题的数据与呈现给视图的数据相同。 在我的自定义查找中,我将结果分配给模型中的静态变量,然后再将结果返回给控制器。 当我点击我的导出按钮时,我想使用控制器调用一个 modelX 方法来返回这个静态数组,该数组可以传递给我的插件以导出数据。但是,我似乎无法做到。我尝试在类中声明一个静态变量,但它不起作用。我尝试在分配的方法中对变量调用global,但它不起作用。到目前为止,我发现的唯一方法是将变量写入会话,然后我可以随时随地访问它。虽然这确实有效,但我认为它效率低下。我认为每次渲染视图时都向会话写入一个大数组不是一个好主意,因为它并不总是需要。

有没有一种方法可以将数据分配给模型中的变量,该变量在对象实例之外可用,以便我可以做到这一点?

【问题讨论】:

  • 为什么要把这个值赋给Model。跟型号有关系吗?如果你在这里显示一些代码会更好。不必严格遵守默认文​​件结构。您可以创建所需的任何文件和目录。以及这些文件中的类。您可以在这些类中实现您需要的任何逻辑,包括 setter/getter。
  • 是的,与型号有关。我想在何时从多个模型中导出,我希望通过超类中的 Model.variable 引用它们

标签: php cakephp


【解决方案1】:

在 MyModel 中:

public static $x = array('a' => 'b');

在控制器中:

$y = MyModel::$x;

引用自phpdocumentation

与任何其他 PHP 静态变量一样,静态属性只能是 使用文字或常量初始化;不允许表达。 因此,虽然您可以将静态属性初始化为整数或数组 (例如),你不能将它初始化为另一个变量, 函数的返回值,或者一个对象。

当您需要在返回静态数组之前执行一些表达式时,使用静态方法。在模型中:

public static function getX() {
    $a = array('a' => 'b');
    $b = array('c' => 'd');
    return array_merge($a, $b);
}

在控制器中:

$y = MyModel::getX();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2015-07-22
    • 2012-06-29
    • 1970-01-01
    • 2017-01-13
    • 2012-07-17
    相关资源
    最近更新 更多