PHP - 对象的节点 - 内部带有“ - ”的变量名称

时间:2012-12-06 11:52:20

标签: php object variable-variables

根据讨论How to check if a string can be used as a variable name in PHP?,用户TIM给出了一个很好的答案,但仍未解决我的问题。

我正在那样打电话,但在生产服务器上他们有魔术引号gpc有效!和..当然..我不能禁用它,我不能要求禁用和最后但并非最不重要的,我不能在运行时禁用它(根据手册)。 所以在这种情况下,即使使用

echo $xml->example->{'phone-number-1'};

PHP是努力的东西之间执行数学运算和我真的成为拼了命地了解如何访问到在这种情况下是“节点”。

当然,如果我用魔术引号测试这个,根据手册,一切都很好。

提前谢谢

1 个答案:

答案 0 :(得分:0)

要详细说明所做的评论,使用您想要共享的可用信息,无论是否设置了magic_quotes_gpc,您的代码都会按照广告的方式工作。它不会尝试对字符串执行任何算术,而magic_quotes_gpc不会影响simplexml解析数据的方式。

~/temp  ►  cat foo.xml
<example>
    <node-ex>
       <identifier-1>ValueOfIdentifier1</identifier-1>
       <phone-number-1>141 555 1414</phone-number-1>
    </node-ex>
</example>

~/temp  ►  cat test.php
<?php
$root = simplexml_load_file("foo.xml");

echo $root->{'node-ex'}->{'identifier-1'} . "\n";
echo $root->{'node-ex'}->{'phone-number-1'} . "\n";

~/temp  ►  php test.php              
ValueOfIdentifier1
141 555 1414
~/temp  ►  php -dmagic_quotes_gpc=1 test.php
ValueOfIdentifier1
141 555 1414

当然,如果您的示例与您实际使用的数据不同,那可能就是问题所在。如果启用了magic_quotes_gpc,则使用stripslashes()应该反转它,然后它应该工作。如果您没有使用常量字符串,而是使用变量 - 这可能是问题的原因。但是,您的示例中没有任何内容表明任何应受magic_quotes_gpc影响或在属性名称中使用“ - ”的内容。