2012-11-14 91 views
1

我有一些像這樣的代碼:從空值在PHP創建默認對象5.4

function getAuthorizedPFComponents($pfState) 
    { 
     $authorizedPFComponents = new \stdClass(); 
                              $compTypeMap=array('platform'=>'pfAuthorizations','mainSite'=>'mainSiteAuthorizations','microSites'=>'microSiteAuthorizations','apps'=>'appAuthorizations'); 
     foreach($compTypeMap as $compType=>$tagName) 
     { 
      $authorizationsNode=$this->pfAuthXMLDOM->getElementsByTagName($tagName)->item(0); 
      foreach($authorizationsNode->getElementsByTagName('authorizations') as $pfComponentAuthElem) 
      { 
       foreach($pfComponentAuthElem->getElementsByTagName('allow') as $allow) 
       { 

        switch($allow->getAttribute('orgCode')) 
        { 
         case 'K_ALL': 
         { 
          $authorizedPFComponents->$compType->{$pfComponentAuthElem->getAttribute('pfComponentCode')}->storeCode=$allow->getAttribute('storeCode'); 
          } 

         } 

它顯示了一個警告:

Warning: Creating default object from empty value 

的警告case K_ALL:

下追溯到碼
+2

歡迎來到SO!您的問題缺少一些細節,例如錯誤來自哪裏? –

+0

它顯示最後一行錯誤,即$ authorizedPFComponents - > $ compType - > {$ pfComponentAuthElem-> getAttribute('pfComponentCode')} - > storeCode = $ allow-> getAttribute('storeCode')它說試圖創建來自空值的默認對象 – user1823249

回答

0

這對於一個簡單的評論來說太長了,所以當它失效時我會刪除它。

你應該做的第一件事是使代碼更簡單;有很多的東西,在一個聲明回事:

$compCode = $pfComponentAuthElem->getAttribute('pfComponentCode'); 
$storeCode = $allow->getAttribute('storeCode'); 

並添加調試代碼:

var_dump($authorizedPFComponents->$compType); 
var_dump($authorizedPFComponents->$compType->$compCode); 

$authorizedPFComponents->$compType->$compCode->storeCode = $storeCode; 

考慮以下代碼:

$x->y = 'test'; 

如果$x沒有定義,會發出警告:

Warning: Creating default object from empty value in xxx 

同樣爲您引用鏈:

$authorizedPFComponents->$compType->$compCode->storeCode 

如果有任何的路徑是空的,接下來的->yyy將導致警告。

+0

按照你的說法,但...如何解決它,如果任何空,如你在參考鏈中所說的? – user1823249

+0

我無法爲你回答,因爲它對你的邏輯非常具體。也許你可以在每次遇到路徑中的空鏈時創建一個'stdClass'? –

+0

耶ü說是RIT ......在每一個參考點,我需要創建stdClass..it解決謝謝...我更改後的代碼...案 'K_ALL': \t \t \t \t \t \t { \t \t \t如果(!isset($ authorizedPFComponents - > $ compType))$ authorizedPFComponents - > $ compType = new \ stdClass(); \t \t \t \t \t \t \t如果(isset($ authorizedPFComponents - > $ compType - > $ compCode)!)$ authorizedPFComponents - > $ compType - > $ compCode =新\ stdClass的(); \t \t \t \t \t \t $ authorizedPFComponents - > $ compType - > $ compCode-> storeCode = $ storeCode; – user1823249

相關問題