2010-08-24 286 views
1

我在php中遇到问题......我不完全理解整个require()的工作原理。我的理解是,它需要当前类的成员变量,并在需要的文件中使它们成为全局变量。如果是这种情况,那为什么它不接受基类的成员变量并使它们成为全局变量?PHP需要全局范围

baseclass.php:

class BaseClass { 
var $user; 
} 

myclass.php:

class MyClass extends BaseClass { 
function doSomething() { 
    require "page.php" 
} 
} 

page.php文件:

$this->user // <- this is out of scope? 

回答

2

$this->user可用。我只是测试它。

require()的工作方式就好像所需文件位于require命令的位置。没有更多,没有更多。

在你的例子中,所需的文件获取函数的作用域。

var $varname是旧式:在PHP 5中,更好地利用

一个
public $varname 
private $varname 
protected $varname 

声明变量。

+0

再次想到,我正在消除我的“不完美风格”的评论。虽然人们可能会争辩说,如果你的方法如此之大,你需要将它们放到外部文件中,但是你有一个设计问题......但这与问题无关。 – 2010-08-24 03:02:43

+0

非常有趣,我可以在需求之外做一个print_r对象(成功),但如果我在里面做,我什么也得不到。 – DaveC 2010-08-24 03:03:27

+0

@DaveC a'print_r($ this);'在include中对我很好。你能显示你的包含文件的确切代码吗? – 2010-08-24 03:05:04

0

我会假定myclass.php包含baseclass.php。当你有include或require(差异只是他们返回的错误类型)时,php包含并评估指定的文件(page.php),包含文件的方法的范围(doSomething();) 。所以我不明白你为什么会超出范围问题。