全局变量的使用不起作用



这是类和函数的全局变量,总是首先调用

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中那样使用它,即-我在类的开头声明变量,在第一个函数中为它分配一个值(仅一次),然后在类中的任何地方使用这个值。

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

正如@Mark Baker所说,$product_sku在您的场景中不是一个gobal变量。

如果您希望变量$product_sku的值持久化,您可以如下所述将该变量声明为静态:

//在类中声明静态属性

公共静态$product_sku=0;

//访问静态属性

self::$product_sku;

请在上详细浏览静态关键字http://php.net/manual/en/language.oop5.static.php

希望它能帮助你。

相关内容

  • 没有找到相关文章

最新更新