【问题标题】:Store and use global variables in the same class, but different public functions using php在同一个类中存储和使用全局变量,但使用php的公共函数不同
【发布时间】:2013-04-08 23:11:05
【问题描述】:

我有一个用 php 用 netbeans 制作的项目,我正在使用 Zend 框架,所以它是模型-视图-控制器。

进入一个类(newclassController),我有4个公共函数。 我想存储第二个函数的全局变量并将其用于第四个函数

我尝试将 URL 中的变量作为参数和 SESSION 变量发送,但出现了一些错误,所以如果您有其他想法,请启发我。

我尝试的所有返回都会给出以下错误消息:
Notice: Undefined variable

注意:如果我将变量存储在 init function 中,它可以工作,但我想从另一个函数中存储它。

【问题讨论】:

  • $this->publicFunction()->yourVariable 怎么样?
  • 您必须将变量作为参数传递给请求或将其存储在会话中。如果这些方法给您带来错误,那么您需要提供您正在尝试的内容以及您在问题中遇到的错误的详细信息。
  • 明确一点:如果您想存储这些数据并在不同的 request 中使用它,那么它需要在会话或某种外部存储中像数据库或文件系统中。任何存储为类成员甚至全局变量的数据都将在后续请求中丢失。

标签: php zend-framework netbeans


【解决方案1】:
public function__constructor(){
$this->value = 'something';
}

$this->value

会在课堂上给出“一些东西”

在类的构造函数中声明变量并使用它

【讨论】:

  • 注意:未定义的属性:这是我得到的。
  • 在类中声明private $value,然后使用$this->value
  • 你的方法部分有效。我的意思是我有一个函数 initAction、一个 indexAction 和一个 tryAction。如果我将值存储在 initAction 中,它将被所有函数识别,但如果我从 indexAction 存储它则不会。而我想要的是将其存储在 indexAction 中并在 tryAction 中使用。
【解决方案2】:

除非我在您启动值时错过了我的猜测:

public function init(){
    $this->value = 'value';
}

该值可用于控制器中的所有“操作”。

这是设计使然。

ZF1中使用init()方法来补充构造函数。您可以在其中添加通常可能放在构造函数中的参数。

为了将值从一个动作持久化到另一个动作,必须使用某种形式的存储。

例如:

//a verbose example
public function indexAction(){
    //initiate a variable
    $i = 100;
    //start a new session and assign a name to it
    $session = new Zend_Session_Namespace('number');
    //assign the value to the namespace
    $session->value = $i
}

稍后在同一个控制器甚至另一个控制器中

public function newAction(){
    //access the session
    $session = new Zend_Session_Namespace('number');
    //assign the value to the view
    $this->view->value = $session->value;
}

现在在 new.phtml 视图中

<?php echo $this-value ?>

在使用 PHP 尤其是 Zend Framework 1 时要记住的重要一点是,每个请求都运行整个应用程序。

这是一个一开始就让我感到困惑的概念。每次您请求一个新页面时,您的 Zend Framework 应用程序都会从​​头开始运行,因此必须保存(持久化)从一个请求到下一个请求的所有数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多