2010-08-24 274 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();) 。所以我不明白你爲什麼會超出範圍問題。