我是新来的,如果有人能帮助我,我会有一个简单的问题。为了保持简短,我正在网站上工作,我的文件由目录分隔,我根据我所在页面的名称包含文件。例如,我有一个主页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
答案 0 :(得分:0)
如果你需要的是自动加载所需的类文件,PHP已经有了这个功能。
答案 1 :(得分:0)
根据manual,include()
函数会继承其所包含行的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}}