我有一些类,这些类包含在index.php
文件中,例如:
<?php
include("./includes/user.class.php");
include("./includes/anotherclass.class.php");
?>
然后我有:
$layout = new layout();
$layout->sampleMethod;
然后在身体里我有:
include("pages/samplePage.php");
然后在samplePage.php
我必须再次创建new layout()
以使用类函数,有没有办法在包含的文件中使用$layout->method
而不创建另一个对象?
更多代码:
布局类:
public function mkLayout()
{
include("pages/page.php");
}
public function getPageUrl()
{
echo "PAGE URL";
}
index.php中的一些:
<?php
require_once("includes/layout.class.php");
$layout = new layout();
$layout->mkLayout();
?>
一些samplePage.php
<?php
$layout->getPageUrl();
?>
samplePage.php返回:
Fatal error: Call to a member function getPageUrl() on a non-object in
答案 0 :(得分:1)
如果您在所包含的页面中使用$layout
,那么它应该正常工作,假设您在包含$layout = new layout();
之前已经声明samplePage.php
。
如果它不适合您,请在随附的页面中var_dump()
进行操作,看看您到达那里。虽然它应该像你要求的那样工作。
在挖掘了一点后,我发现无论文件包含在哪里,它都会继承使用它的函数/方法的范围,所以使用
global $layout;
在尝试使用方法之前,它应该可以正常工作。
<强> Manual Entry 强>:
当包含文件时,它包含的代码将继承发生包含的行的变量范围。从那时起,调用文件中该行可用的任何变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。
有用的链接:
答案 1 :(得分:1)
不,除了你想要包含包含布局类的先前实例化的文件。
答案 2 :(得分:0)
关闭您发布的内容,如果您的代码看起来如此:
<?php
include("./includes/user.class.php");
include("./includes/anotherclass.class.php");
$layout = new layout();
$layout->sampleMethod;
include("pages/samplePage.php");
?>
$layout
应已在pages/samplePage.php
中声明。尝试在var_dump($layout)
中执行pages/samplePage.php
,您会看到它已经定义。
为什么不在你的班级里面有一个布局成员?
答案 3 :(得分:0)
在这个例子中,也许你并没有真正努力寻找面向对象。考虑只使用没有类的普通函数。