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

Това е глобалната променлива за класа и функцията, която винаги се извиква първа

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, трябва да използвате Registry Pattern на Magento. Можете да намерите подробности за модела на регистъра на Magento тук http://alanstorm.com/magento_registry_singleton_tutorial

person Mubashir    schedule 22.11.2013

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

Ако искате стойността на променливата $product_sku да остане, можете да декларирате променливата като статична, както е споменато по-долу:

//Деклариране на статичното свойство в класа

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

//Достъп до статичното свойство

self::$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