Php 全局变量的使用不起作用

Php 全局变量的使用不起作用,php,magento,global-variables,global,Php,Magento,Global Variables,Global,这是始终首先被调用的类和函数的全局变量 private $product_sku; public function indexAction(){ $request = $this->_getValidRequest(); global $product_sku; if ($this->flag == FALSE) { $product = Mage::getModel('catalog/product')->loadByAttribute('sku',

这是始终首先被调用的类和函数的全局变量

private $product_sku;

public function indexAction(){
  $request = $this->_getValidRequest();
  global $product_sku;

  if ($this->flag == FALSE) {
    $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product_sku);
        $product_sku = $request['sku'];
    }
    else {
        $product = Mage::getModel('catalog/product')->loadByAttribute('printed_order_number', $request['pon']);
        $product_sku = $product->getSku();
    }

    // here I call the other function
}
和另一个使用全局变量的函数

public function showPopUpInProductViewPageAction(){
    $request = $this->_getValidRequest();
    $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $GLOBALS['product_sku']);

    Mage::log($GLOBALS['product_sku']); // logging $product_sku to check its value, but it's empty
}
这些不是完整的函数,只是与问题相关的代码

因此,在第二个函数中,
$product
对象为空,因为
product\u sku
没有值

我不想重复检查
标志的代码


我如何像在Java中一样使用它,即-我在类的开头声明变量,在第一个函数中为它赋值(仅一次),然后在类中的任何地方使用该值。

正如@Mark Baker所说,$product\u sku在您的场景中不是一个gobal变量

如果要将变量$product_sku的值转换为persit,可以将变量声明为静态,如下所述:

//在类中声明静态属性

公共静态$product_sku=0

//访问静态属性

self::$product_sku

请在下面的位置详细查看static关键字


希望它能对您有所帮助。

您需要使用Magento的注册表模式,而不是使用PHP全局文件。您可以在此处找到Magento注册表模式的详细信息

仅仅因为您通过
$this
访问某些内容,并不能使其成为
全局的
。。。。事实上,通过
$this
访问它会使它成为一个实例变量或属性。。。。这绝对不是global@MarkBaker-我用一些新的方法更新了我的问题,我尝试过(从我在这里发现的),但也没有帮助…但我不希望它是静态的。我想在第一个函数中给它赋值(整个过程只赋值一次),然后在类中的任何地方使用我想要的值。你可以像self一样重新给它赋值:$product_sku=$request['sku'];在第一个函数中