Php 为什么在方法中使用require_once有时会失败?

Php 为什么在方法中使用require_once有时会失败?,php,Php,如果我这样做,这只是一个虚构的例子,但它将有助于解释问题: variables.php: 两个文件都在同一个文件夹中;尽管这个类在其他文件夹中的脚本中实际上是必需的 大多数情况下,它只是按预期打印:foo=foo和bar=bar;但是,当一些脚本需要这个类来执行一些繁重的操作,比如在数组中填充大量变量,比如计算时,它的行为就像导入的变量根本不存在一样,比如打印foo=和bar= 查看apache的error.log,require_once根本不会抛出任何错误;但它会打印出如下内容: PHP

如果我这样做,这只是一个虚构的例子,但它将有助于解释问题:

variables.php:

两个文件都在同一个文件夹中;尽管这个类在其他文件夹中的脚本中实际上是必需的

大多数情况下,它只是按预期打印:foo=foo和bar=bar;但是,当一些脚本需要这个类来执行一些繁重的操作,比如在数组中填充大量变量,比如计算时,它的行为就像导入的变量根本不存在一样,比如打印foo=和bar=

查看apache的error.log,require_once根本不会抛出任何错误;但它会打印出如下内容:

 PHP Notice:  Undefined variable: foo in /path/to/class_and_variables/SomeClass.php at line 10
 PHP Notice:  Undefined variable: bar in /path/to/class_and_variables/SomeClass.php at line 11
正常情况下,它按预期工作,并且变量在do_something的范围内正确导入;但是对于一些特定的脚本,它并没有


就像我猜PHP耗尽了内存,悄悄地销毁了导入的变量一样?我不知道为什么PHP的require\u有时会表现得如此奇怪…

我想这只会在方法的第一次执行中包含,而不会在第二次执行中包含。然后,该方法的第二次执行将不定义变量。您应该改为使用require。

我认为这将只包括在方法的第一次执行中,而不包括在第二次执行中。然后,该方法的第二次执行将不定义变量。你应该改用require。

你能举一个失败的例子吗?我只是不知道require\u会先查看当前文件:我以为它只是查看路径中的可用目录。因此,使用dirname\uuuuu文件看起来是一个不错的选择idea@trey路径不是相对于当前文件,而是相对于当前工作目录,而当前工作目录并不总是与当前文件相同。使用_文件_将其设置为绝对值是一个好主意。@deceze:实际上,我用错了词:我不是说要查看当前文件,而是要查看当前目录。对不起that@trey如果您将它们都放在某个子目录中,并在该子目录外执行一个文件,该子目录确实需要'sub/a.php',则当前工作目录(所有要求都与之相关),你能举一个失败的例子吗?我只是不知道require_once会先查看当前文件:我以为它只是查看路径中的可用目录。因此,使用dirname\uuuuu文件看起来是一个不错的选择idea@trey路径不是相对于当前文件,而是相对于当前工作目录,而当前工作目录并不总是与当前文件相同。使用_文件_将其设置为绝对值是一个好主意。@deceze:实际上,我用错了词:我不是说要查看当前文件,而是要查看当前目录。对不起that@trey如果您将它们都放在某个子目录中,并在该子目录之外执行一个文件,该子目录确实需要“sub/a.php”,那么当前的工作目录(所有要求都是相对的)将不会是sub。换句话说,如果该文件之前已包含在其他任何地方,则此操作将失败。非常感谢。虽然知道require_once和require之间的区别,但我仍然无法理解require_once的行为有时我为自己感到羞耻…你不应该感到羞耻,你应该将required_once视为布尔值,如果文件已经加载过一次,其余的请求它将返回FALSE,因为它已经被使用过一次。换句话说,如果该文件之前已经包含在其他任何地方,则此操作将失败。非常感谢。虽然知道require_once和require之间的区别,但我仍然无法理解require_once的行为有时我为自己感到羞耻…你不应该感到羞耻,你应该将required_once视为布尔值,如果文件已经加载过一次,其余的请求将返回FALSE,因为它已经被使用过一次。
<?php
class SomeClass {

    public static function do_something() {
        // XXX Sometimes this works well; but sometimes,
        //     imported variables are null or empty for some
        //     reason within this method's scope
        require_once( dirname(__FILE__) . '/variables.php' );

        echo '<p>foo = '.$foo.'</p>';
        echo '<p>bar = '.$bar.'</p>';
    }
}
?>
 PHP Notice:  Undefined variable: foo in /path/to/class_and_variables/SomeClass.php at line 10
 PHP Notice:  Undefined variable: bar in /path/to/class_and_variables/SomeClass.php at line 11