【问题标题】:PHP function not returning objectPHP函数不返回对象
【发布时间】:2011-12-28 23:16:39
【问题描述】:

考虑以下 PHP 函数,该函数应该从根据语言选择的 XML 文件加载对象:

function item1($Langu){
if($Langu=='bg'){
    $urlD = "someurl/rss1.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeedDBG.xml',3600));
    $itemD = '';
    if($xmlD === FALSE)
        {$itemD = '';}
    else
        {$itemD = $xmlD->channel->item;}
}
else{
    $urlD = "someurl/rss2.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD,'cachedfeedDEN.xml',3600));
    $itemD = '';
    if($xmlD === FALSE)
        {$itemD = '';}
    else
        {$itemD = $xmlD->channel->item;}
}
return $itemD;
}

当我回显函数结果时,什么都没有显示。也许我应该在类中包装函数?请不要抨击我,因为我是 OOP PHP 领域的新手。非常感谢任何使该功能正常工作的帮助。

【问题讨论】:

  • 它不一定会返回一个对象——有两种情况你的函数会显式返回一个空白字符串。
  • 如何打印结果?如果您使用结果的 var_dump 代替,您会得到什么?
  • 如果我用 var_dump 更改返回值,我也会得到空格。@Crontab-我应该怎么做才能不返回空白字符串?如果你看到一些错误,请帮助修复它而不是评论一些东西我无法改变。
  • 我们不知道在 FALSE 的情况下你要返回什么。获取空字符串的代码如下: {$itemD = '';}
  • 如果我删除函数并返回值,我使用 $itemD->title;它不是空白的

标签: php function object return


【解决方案1】:

对象参数很可能根本不存在。这样做:

$result = item1($Langu);
echo "<pre>" . print_r($result, true) . "</pre>";

function item1($Langu) {
  if ($Langu == 'bg') {
    $urlD = "someurl/rss1.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD, 'cachedfeedDBG.xml', 3600));
  }
  else {
    $urlD = "someurl/rss2.php";
    $xmlD = simplexml_load_file(cacheFetch($urlD, 'cachedfeedDEN.xml', 3600));
  }

  return $xmlD;
}

这将显示对象的大部分属性。现在不幸的是 SimpleXML 返回了一个资源,所以也会有很多信息被隐藏。不过,这应该可以帮助您入门。有一种方法可以获取并输出所有隐藏信息。查看 PHP.net 上函数下方的 cmets。 (http://us3.php.net/manual/en/function.simplexml-load-file.php)

此外,空格键是您的朋友而不是您的敌人,请学习使用它以及其他简洁的编码习惯(例如描述性变量名称)。从长远来看,这将使您和其他查看您的代码的程序员更加快乐。

【讨论】:

    【解决方案2】:

    1: 2 个返回案例返回一个空字符串,因此回显返回值不会正确产生任何结果。

    2:如果要输出对象的内容,必须使用 print_r() 或 var_dump()

    3:简单 XML 有点奇怪,因为 var_dump 或 print_r 不会显示对象的所有属性(http://us3.php.net/manual/en/simplexmlelement.attributes.php - “SimpleXML 制定了向大多数方法添加迭代属性的规则。它们无法查看使用 var_dump() 或其他任何可以检查对象的东西。”) - 所以你可以通过查看你可用的东西来受益 - http://www.php.net/manual/en/ref.simplexml.php - 该页面上的第一条评论有一个有用的功能,可以帮助你完成转储对象:

    将 XML 对象转换为数组的快速 sn-p:

    <?php
    function xml2array ( $xmlObject, $out = array () )
    {
            foreach ( (array) $xmlObject as $index => $node )
                $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;
    
            return $out;
    }
    ?>
    

    玩得开心! ;-)

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 1970-01-01
      • 2012-03-27
      • 2011-02-27
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多