包含文件中的新类

时间:2011-08-23 14:56:20

标签: php oop include

我有一些类,这些类包含在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

4 个答案:

答案 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)

在这个例子中,也许你并没有真正努力寻找面向对象。考虑只使用没有类的普通函数。