使用全局变量不起作用

时间:2013-11-22 11:13:46

标签: 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', $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_sku没有值。

我不想重复检查flag

的代码

如何在Java中使用它,即 - 我在类的开头声明变量,我在第一个函数中为它分配一个值(仅一次)然后我在课堂上的任何地方都使用这个值。

2 个答案:

答案 0 :(得分:1)

您需要使用Magento的注册表模式,而不是使用PHP Globals。您可以在此处找到Magento注册表模式的详细信息 http://alanstorm.com/magento_registry_singleton_tutorial

答案 1 :(得分:0)

正如@Mark Ba​​ker所说,$ product_sku在你的场景中不是一个全局变量。

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

//在类

中声明静态属性

public static $ product_sku = 0;

//访问静态属性

自:: $ product_sku;

请在http://php.net/manual/en/language.oop5.static.php

详细介绍static关键字

希望它会对你有所帮助。