2

我正在使用 PHP 的require_once()方法将一个 PHP 脚本包含到另一个中。该脚本包含一个类 TemplateAdmin,它在脚本之后立即实例化自身,如下所示:

class TemplateAdmin {
// Class body...
}

$templateAdmin = new TemplateAdmin();

这在一段时间内工作得很好。但是,我采用了一种新的导入技术来包含类和包。我已经测试了这种新技术,并且它有效!但是,出于某种奇怪的原因,我导入的任何类中的任何方法在我需要时都不存在。但是,似乎实例变量仍然存在。

例如,当调用具有此绝对路径的类时:

require_once("C:\wamp\www\wave_audio\system\server\templates\TemplateAdmin.php");

...我在调用堆栈中收到此错误:

Fatal error: Call to undefined method stdClass::top() in C:\wamp\www\wave_audio\cms\index.php on line 189

这个错误是指我top()在类内部使用方法TemplateAdmin

有谁知道为什么会这样???如果这有帮助,我一直在使用require_once(),我在 Windows XP Media Center 机器上运行 PHP 5.3.5。

感谢您的时间!

4

2 回答 2

1

假设您不想在这里使用全局变量是一种只需要进行一些更改的方法。

模板管理员.php:

class TemplateAdmin {
// Class body...
}

return new TemplateAdmin();

在导入中返回包含一次:

function import($classes) {
//Convert ECMAScript style directory structures to Unix style
  $address = str_replace(".", "/", $classes);
  $address = INSTALL_ROOT . "system/server/" . $address . ".php";

  if (file_exists($address) && is_file($address)) {
    return require_once($address);
  } else {
    die(""" . $classes . "" does not link to an existing class");
  }
}

分配变量:

$adminTemplate = import('templates.TemplateAdmin');
于 2011-07-11T23:05:50.263 回答
0

我感觉你的 php 错误信息是准确的。我知道在您的精简版本中,您将它拼凑在一起,以确定它是如何设置的,但它显然不是直接复制/粘贴,因为它就像:

class TemplateAdmin {
  public function top() {
  //The "top" method...
  }
}

因此,错误消息表明方法“top”未定义。如果它没有正确包含您的文件,它会告诉您您实例化的类不存在。该方法在您认为的类中不存在,或者该方法已在该对象实例中的某处未设置。相信你的错误信息。

于 2011-07-11T22:54:58.707 回答