为什么变量不可见?

时间:2014-08-13 12:22:03

标签: php xml

我有这种带有PHP处理指令的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<?php
  $a = 8;
?>
<?php function add_some() { ?>
  <element attr="<?php echo $a ?>"/>
<?php } ?>

<elements>
  <?php
    add_some();
    add_some();
  ?>
</elements>

当我使用php test.xml处理它时,我得到:

<?xml version="1.0" encoding="UTF-8"?>

<elements>
    <element attr="PHP Notice:  Undefined variable: a in test.xml on line 5
"/>
  <element attr="PHP Notice:  Undefined variable: a in test.xml on line 5
"/>
</elements>

请告诉我如何解决它?

5 个答案:

答案 0 :(得分:1)

请熟悉PHP变量范围http://php.net/manual/en/language.variables.scope.php

在你的情况下,你应该将$a作为参数传递给add_some()或者在其正文中使用global $a;(但这是个坏主意),否则它会超出{{1的可见范围功能。

PS:发现任何模板引擎(Smarty,Blaze),因为意大利面条代码不好,坏事。

答案 1 :(得分:1)

$a在函数范围之外,您应该在函数内部定义变量或将其用作参数。

了解变量范围: http://php.net/manual/en/language.variables.scope.php

<?xml version="1.0" encoding="UTF-8"?>
<?php function add_some($a) { ?>
<element attr="<?php echo $a ?>"/>
<?php } ?>

<elements>
    <?php
    add_some(8);
    add_some(8);
    ?>
</elements>

您应该阅读用户自定义函数的php手册:http://php.net/manual/en/functions.user-defined.php

答案 2 :(得分:1)

这不起作用因为它没有在函数中定义。

有几种方法可以解决这个问题:

1)使用全局变量:

 echo $a; // working
 function add_some() {
   global $a;
   echo $a; // working

2)如果该功能特定于该功能,请将其传递给该功能:

echo $a; // working
  function add_some($a) {
    echo $a; // working

答案 3 :(得分:0)

a是一个全局变量。除非通过global关键字明确告知全局变量,否则函数无法读取或写入全局变量:

$foo = 'bar';
function some_func() {
    global $foo;
    echo $foo; //bar
}

答案 4 :(得分:0)

它应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<?php
$a = 8;
function add_some() { ?>
<element attr="<?php global $a; echo $a; ?>"/>
<?php } ?>
<elements>
<?php
 add_some();
 add_some();
?>
</elements>