【问题标题】:Variable keeps being mistaken for a boolean when it should be an object当变量应该是一个对象时,它一直被误认为是一个布尔值
【发布时间】:2014-02-18 01:44:16
【问题描述】:

我的一个变量 $xml 在应该返回对象时一直被误认为是布尔值。

我尝试将 $xml 更改为 $data... 认为可能是命名问题。

我也尝试过隔离 str() 函数,但它被识别为字符串 - 这是正确的。

我也尝试过使用 gettype(simplexml_load_string(str()); 它也返回一个布尔值。

请让我知道我可能做错了什么:

    function str() {
        if(file_exists(__DIR__ . '/../' . $clientXML)) {
            return file_get_contents(__DIR__ . '/../' . $clientXML);
        } else {
            return file_get_contents(__DIR__ . '/../xml-skeleton.xml');
        }
    }

    $xml = simplexml_load_string(str());

    echo 'XML IS: ' . gettype($xml);

【问题讨论】:

  • 即使file_exists 说文件不存在,你为什么还要打电话给file_get_contents
  • 你从不使用的$contents 变量有什么意义?
  • 你在哪里查看$xml的类型?不应该是gettype($xml)吗?
  • 如果file_get_contents 失败,则返回false。这就是你得到的布尔值。
  • 对不起。我更新了代码以更准确地影响我看到的行为。

标签: php xml boolean


【解决方案1】:

simplexml_load_string 如果无法解析 xml 字符串,则返回 FALSE。您可以像这样处理/检查错误:

<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>");
if ($sxe === false) {
    echo "Failed loading XML\n";
    foreach(libxml_get_errors() as $error) {
        echo "\t", $error->message;
    }
}
?>

摘自:http://us3.php.net/manual/en/simplexml.examples-errors.php

【讨论】:

  • Hrm... 目前正在返回“加载 XML 失败”。但是,它没有返回任何特定的错误。
  • 当我使用 $xml = simplexml_load_file(DIR . '/../' . $clientXML);这似乎有效。
  • 我觉得 if/else 中的返回发生了一些事情,导致了一些奇怪的行为。还不确定是什么。
  • @JIGGABITS 对此不完全确定,您在这里处理的文件是否很大?您可以尝试设置 LIBXML_PARSEHUGE 标志,如下所述:stackoverflow.com/questions/14950589/…
  • 我已将 str() 中的返回值更新为 return simplexml_load_string(__DIR__ . '/../' . $clientXML) -- 现在,当我尝试将此值分配给 $xml 时,我得到一个更清晰的错误:需要开始标记,'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2020-01-18
  • 1970-01-01
  • 2020-12-04
  • 2021-04-17
  • 1970-01-01
  • 2020-09-16
相关资源
最近更新 更多