PHP / Zend抱怨未定义的变量

时间:2009-06-15 08:54:54

标签: php include zend-studio zend-debugger

情况:

的index.php:

<?php
    include("foo.php");
    include("baz.php");
        foo("bar.php");
?>

baz.php:

<?php
    $x = 42;
?>

foo.php:

<?php
    function foo($p) {
        include_once($p); // please dont mind the inclusion hole
    }
?>

bar.php:

<?php
    echo $x;
?>

Zend 通知:未定义的变量:x

放置全球$ x;在bar.php中删除了通知,但我理解为什么首先会有关于此的通知..不包括像C头一样的很多工作?这意味着解释的代码看起来像这样:

<?php
    function foo($p) {
        include_once($p); // please dont mind the inclusion hole
    }
    $x = 42;

    // this however, is included by a function...
    // does the function's scope influence the stuff it includes?
    echo $x; // undefined variable
?>

我的编辑器是Eclipse / Zend包。

4 个答案:

答案 0 :(得分:3)

我不是专家,所以如果我错了请不要激怒我,但我认为在调用者的上下文中调用include_once或require_once调用的文件。因为函数foo()不会知道$ x,所以它的任何被调用包都不会。您可以通过使用与上面相同的设置在函数foo()中“声明”$ x来进行实验。

答案 1 :(得分:0)

我得到了很多这些通知,因为我几乎总是使用“$ o。='foo'”而没有任何定义。我只是用error_reporting(E_ALL ^ E_NOTICE)隐藏它们,但我不知道在这种情况下它是否是最佳方式。

答案 2 :(得分:0)

即使变量和函数在同一个文件中,它也不起作用。

  1 <?php
  2
  3 $x = 3;
  4
  5 function t()
  6 {
  7   echo $x;
  8 }
  9
 10 t();

什么都不打印。

但添加全局

  1 <?php
  2
  3 $x = 3;
  4
  5 function t()
  6 {
  7   global $x;
  8   echo $x;
  9 }
 10
 11 t();

你可以看到“3”。

在函数中,除非声明全局变量,否则无法看到全局变量。

答案 3 :(得分:0)

是它导致你的问题的功能范围

如果你更换

foo("bar.php");

include("bar.php");

你会发现一切正常,因为它将它放入当前范围而不是功能范围