2013-11-22 85 views
0

這是類和函數的全局變量,它總是被稱爲第一使用全局變量的不工作

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中使用它,即 - 我在類的開始處聲明變量,我在第一個函數中爲它分配一個值(僅一次),然後使用此值無論我在課堂上想要什麼。

+1

僅僅因爲您通過'$ this'訪問某些內容不會使其成爲'global' ....事實上,通過'$ this'訪問它使其成爲實例變量或屬性....這肯定是__not__ global –

+0

@MarkBaker - 我用我嘗試過的一些新方法(從我在這裏發現的http://php.net/manual/en/language.variables。 scope.php)但這並沒有幫助... – Syspect

回答

0

@Mark Ba​​ker說,$ product_sku在您的方案中不是gobal變量。

如果您希望變量$ product_sku到persit的價值,你可以聲明變量爲靜態如下所述:

//聲明類的靜態屬性

公共靜態$ product_sku = 0 ;

//訪問靜態屬性

self :: $ product_sku;

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

希望它會幫助你通過詳細static關鍵字。

+0

但我不希望它是靜態的。我想在第一個函數中爲它分配一個值(整個過程只有一次),然後在課程中的任何地方使用該值,我想要的。 – Syspect

+0

你可以重新賦值給它:self :: $ product_sku = $ request ['sku'];在第一個功能 –