1

我有一些这样的代码:

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:

4

1 回答 1

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将导致该警告。

于 2012-11-14T10:15:40.423 回答