我发现这个PHP代码片段有什么问题?我得到未定义的变量'obj'

时间:2014-05-08 19:12:07

标签: php require require-once

我想仅仅想要对我发现的这三个代码片段以及PHP如何与它们表现一点作出澄清:

1)一个带有静态方法调用的php类(tmp.class.php):

<?php

class Dummy {
        public function sayHello()
        {
            echo "HELLO FROM DUMMY";
        }

        public static function requireScript() {
            require __DIR__ . "/tmp2.php";
        }
}

Dummy::requireScript();

2)另一个文件(tmp1.php),实例化先前定义的类:

<?php
require_once __DIR__. "/tmp.class.php";

$obj = new Dummy;

?>

3)另一个文件(tmp2.php),使用该类的前一个实例:

<?php

require_once __DIR__ ."/tmp1.php";

$obj->sayHello();

?>

现在我知道,因为requireScript()方法中有一个require调用,实际上tmp2.php包含两次,对不对?但是当我运行脚本运行(在浏览器中打开tmp2.php文件)时,我得到一个注意:未定义变量:obj 然后因为sayHello()而导致致命错误;

$ obj不应该可用于第二个必需的tmp2.php脚本吗?这段代码有什么问题?

感谢您的关注!

1 个答案:

答案 0 :(得分:1)

事实上,没有人应该以这种方式构建PHP应用程序。您不应该将require / include放在许多文件中。在简单的应用程序中,您应该在文件的开头运行require / include以获得所需的一切。在更复杂的应用程序中,您应该简单地使用面向对象编程并使用自动加载器在需要时加载类定义