2010-03-24 98 views
1

我使用zend。定義PHP類以外的變量

我想在控制器類&以外的其他操作中定義下面的代碼。

$user = new Zend_Session_Namespace('user'); 
$logInArray = array(); 
$logInArray['userId'] = $user->userid; 
$logInArray['orgId'] = $user->authOrgId; 

class VerifierController extends SystemadminController 
{ 
public function indexAction() 
    { 
     // action body 
     print_r($logInArray); 
    } 
} 

但它不打印,另一方面這個數組中的索引功能,它顯示類不在此陣。

這怎麼可能。 謝謝。

回答

2

要從方法/函數內部訪問一個全局變量,你必須將其聲明爲global,方法/函數內部:

class VerifierController extends SystemadminController 
{ 
public function indexAction() 
    { 
     global $logInArray; 
     // action body 
     print_r($logInArray); 
    } 
} 


在手冊中,看到了有關Variable scope的部分。


不過,請注意,使用全局變量是不太好的做法:在這種情況下,你的類不再獨立的:它依靠的存在,正確的定義,外部變量 - 這是不好的

也許一個解決方案是:

  • 通該變量作爲參數傳遞給該方法?
  • 或將它傳遞給你的類的構造函數,並將其存儲在屬性中?
  • 或者添加一個方法,它將接收該變量並將其存儲在一個屬性中,如果無法更改構造函數?
+0

已測試&工作:) – apis17 2010-03-24 06:34:16

0

您可以用許多方式存儲用戶,並以更乾淨的方式訪問用戶。您可以將它存儲在Zend_Registry中,然後在需要檢索用戶的地方使用Zend_Registry :: get('user')。你也可以把它作爲請求對象的參數存儲起來,然後在控制器中簡單地做$ user = $ this - > _ getParam('user');

如果您需要訪問許多控制器中從SystemadminController繼承的用戶數組,您可以將其作爲SystemadminController的受保護屬性(例如。protected $ _user)進行存儲。然後,您需要在子控制器中執行的操作是訪問$ this - > _ user。