通过类中的函数包含文件时实例的继承?

时间:2012-08-01 17:59:59

标签: php

我是新来的,如果有人能帮助我,我会有一个简单的问题。为了保持简短,我正在网站上工作,我的文件由目录分隔,我根据我所在页面的名称包含文件。例如,我有一个主页dashboard.php,它看起来像:

include $file1;
include $file2;
include $file3 etc.

现在我尝试使用包含构造对象时自动所需的所有文件的类页面。 我的问题是当我在类的帮助下包含文件时,我似乎无法在包含的文件中找到对象的实例。 例如:$page=new Page("Test") includes $file1,$file2等....现在,当我尝试在$ file1中使用对象$ page时,它没有找到它。 如果有人有解决此问题的方法,或者您认为这是设计网页的错误方法,请告诉我。

这不是包含的问题,包含正在工作,我正在使用自动加载,所有问题都是通过该类包含的类中的对象方法。让我更明确一点:

main.php :

    $page=new Page("Test");

Page.class.php :
__construct($title)
{
include($file1);
include($file2);
}
$file1:
echo "test"; // working
$file2:
echo $page->getTitle() // doesn't work, don't worry about the method it exists and works

2 个答案:

答案 0 :(得分:0)

如果你需要的是自动加载所需的类文件,PHP已经有了这个功能。

http://php.net/manual/en/language.oop5.autoload.php

答案 1 :(得分:0)

根据manualinclude()函数会继承其所包含行的variable scope

我假设你现在正在做类似的事情:

class Page {
public __construct() {
    include($file1);
    include($file2);
}
}

如果您希望文档可以在类之外访问,那么您应该在类中添加包含 ,例如:

include($file1);
include($file2);
class Page { ...

如果您需要包含的文件可以访问类实例本身(根据您的最新更新),您将使用$this伪变量。您无法在包含的文件中使用$page的原因是因为$page尚未定义;该变量的范围在main.php文件及其包含的任何其他文件中(但没有“内部”类)。

您可以使用$this代替echo $this->getTitle()更新您的包含($ file2)以使用echo $page->getTitle(),它应该可以正常使用。

或者,如果您想使用$page变量而不是$this,则可以在包含使用它的文件之前定义$page = $this;,例如public __construct() { $page = $this; include($file2); // file2 will now have access to a variable named $page } :< / p>

{{1}}