Использование глобальной переменной не работает

Это глобальная переменная класса и функция, которая всегда вызывается первой.

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, то есть - я объявляю переменную в начале класса, я присваиваю ей значение (только один раз) в первой функции, а затем я использую это значение везде, где я хочу в классе.


person Syspect    schedule 22.11.2013    source источник
comment
Тот факт, что вы обращаетесь к чему-либо через $this, не делает его global... фактически доступ к нему через $this делает его переменной экземпляра или свойством.... которое определенно не является глобальным   -  person Mark Baker    schedule 22.11.2013
comment
@MarkBaker - я обновил свой вопрос с помощью нового подхода, который я пробовал (из того, что я нашел здесь php.net/manual/en/language.variables.scope.php ), но и это не помогло...   -  person Syspect    schedule 22.11.2013


Ответы (2)


Вместо использования PHP Globals вам нужно использовать шаблон реестра Magento. Подробную информацию о шаблоне реестра Magento можно найти здесь http://alanstorm.com/magento_registry_singleton_tutorial.

person Mubashir    schedule 22.11.2013

как сказал @Mark Baker, $product_sku не является глобальной переменной в вашем сценарии.

Если вы хотите, чтобы значение переменной $product_sku сохранялось, вы можете объявить переменную статической, как указано ниже:

//Объявление статического свойства в классе

публичный статический $product_sku = 0;

//Доступ к статическому свойству

сам::$product_sku;

Подробно изучите ключевое слово static на странице http://php.net/manual/en/language.oop5.static.php

Надеюсь, это поможет вам.

person K V N R    schedule 22.11.2013
comment
но я не хочу, чтобы он был статичным. Я хочу присвоить ему значение в первой функции (только один раз за весь процесс), а затем использовать это значение везде в классе, которое я хочу. - person Syspect; 22.11.2013
comment
вы можете повторно присвоить ему значение, например self::$product_sku = $request['sku']; в первой функции - person K V N R; 22.11.2013