【问题标题】:Returning XML value in function在函数中返回 XML 值
【发布时间】:2011-10-18 12:43:21
【问题描述】:

我有一个返回函数

if (file_exists($address)) {

    return simplexml_load_file($address) or die("Error loading XML");
}
else {

    return false;
}

然后在我的页面上调用我的 XML 函数

$page = fetchXML();

echo $page->title;

但我明白了

Notice: Trying to get property of non-object in [...]

当我var_dump($page); 我得到bool(true)

为什么它不返回我的 XML 数据?


注意:

如果我

return $address

在我的函数中,然后使用

$page = simplexml_load_file(fetchXML()) or die("Error loading XML");

echo $page->title;

它有效。

【问题讨论】:

    标签: php xml simplexml file-exists


    【解决方案1】:

    因为你不应该这样短路它:

    $ php -r'function foo(){ return 2 or false; } var_dump(foo());'
    bool(true)
    

    returnorless 优先级(实际上,它不是运算符,所以运行整个表达式),但 = 具有更高的优先级。

    $page = simplexml_load_file(fetchXML()) or die("Error loading XML");
    

    等同于:

    ($page = simplexml_load_file(fetchXML())) || die("Error loading XML");
    

    虽然

    return simplexml_load_file($address) or die("Error loading XML");
    

    等同于:

    return (simplexml_load_file($address) or die("Error loading XML"));
    

    另见operator precedence

    【讨论】:

    • @imoda:你是什么意思?我不太清楚你在那里问什么。 or||,区别在于它的优先级低于赋值 =
    • 我明白你的意思。我希望or 应用于simplexml_load_file 的可能失败,而不是返回值。如果我删除 or die 我的功能按预期工作。但是,我尝试使用 || 和括号,但我无法让它与 or die 子句一起使用。这可以实现吗?
    • @imoda:只是不要把它写成一条线。使其成为 2 个不同的表达方式,增加易读性并明确目的。
    • 嗯,2 行:$page = simplexml_load_file(fetchXML()) or die("Error loading XML"); return $page; 然后or die( 构造不应该在生产代码中。 至少会触发一些可能会被记录的错误,但如果您喜欢您的用户,请尝试更优雅的方式来处理它。如果没有,则抛出一个异常,该异常会在您确实知道如何优雅地处理故障时被捕获。
    猜你喜欢
    • 2023-03-16
    • 2015-08-25
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2018-11-19
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多