局势:

的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的包。

有帮助吗?

解决方案

我不是专家,所以请不要火焰我,如果我错了,但我想通过include_once或require_once调用文件被称为在调用者的上下文。由于函数foo()不会知道X $然后都不会对任何它叫做包括。你可以通过“声明” $ X内部函数foo()与上述相同的设置进行实验。

其他提示

我收到了一堆上述通知书的,因为我几乎用百达行“$ O操作。=‘富’”没有任何定义。我只是把error_reporting(E_ALL ^ E_NOTICE)隐藏它们,但我不知道这是否是在这种情况下的最佳方式。

它不工作,即使变量和函数是在同一文件中。

  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”。

在一个功能你无法看到全局变量,除非你把它声明。

是其知道导致问题的功能范围

如果您更换

foo("bar.php");

include("bar.php");

你会发现一切正常,因为它把它变成了目前的范围,而不是功能范围

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top