0

我是新来的,如果有人可以帮助我,我有一个快速的问题。为了简短起见,我正在一个网站上工作,我的文件由目录分隔,我根据我所在页面的名称包含文件。例如,我有一个主页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
4

2 回答 2

0

根据手册,该include()函数继承了它所在行的变量范围。

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

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

如果您需要在您希望它们包含的类之外访问文件,您应该在类之外添加包含,例如:

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

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

您可以更新您的包含 ($file2) 以使用$thiswithecho $this->getTitle()而不是,echo $page->getTitle()它应该可以正常工作。

或者,如果您想使用$page变量而不是,您可以在包含使用它的文件之前$this定义它,如下所示:$page = $this;

public __construct() {
    $page = $this;
    include($file2); // file2 will now have access to a variable named $page
}
于 2012-08-01T18:05:36.540 回答
0

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

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

于 2012-08-01T18:04:49.753 回答