PHP方法消失了?

PHP方法消失了?,php,class,methods,require-once,Php,Class,Methods,Require Once,我使用PHP的require\u once()方法将一个PHP脚本包含到另一个脚本中。此脚本包含一个名为TemplateAdmin的类,该类在脚本之后立即实例化自身,如下所示: class TemplateAdmin { // Class body... } $templateAdmin = new TemplateAdmin(); 这在一段时间内运作良好。但是,我采用了一种新的导入技术来包含类和包。我已经测试了这项新技术,它很有效!然而,出于某种奇怪的原因,我导入的任何类中的方法在我需要时

我使用PHP的
require\u 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
此错误是指我在
TemplateAdmin
类中使用了
top()
方法

有人知道为什么会这样吗???如果这有帮助的话,我一直在使用
require\u once()
,我正在Windows XP Media Center机器上运行PHP 5.3.5


谢谢你抽出时间

我感觉您的php错误消息是准确的。我知道在你的精简版上,你是如何拼凑起来的,你确定它是安装好的,但它显然不是直接复制/粘贴的,因为它类似于:

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

因此,错误消息表示未定义方法“top”。如果它没有正确地包含您的文件,它会告诉您实例化的类不存在。要么该方法不存在于您认为它存在的类中,要么该方法已在该对象实例中的某个位置取消设置。信任您的错误消息

假设您不想在这里使用globals,这是一种只需要少量更改的方法

TemplateAdmin.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');

如果你能展示完整的相关源代码(你在哪里做需求,你在哪里调用top())……你能把你的代码减少到一个最小的测试用例,然后把它发布到这里吗?它太长了,不能包含整个脚本,但我可以向你保证,在调用方法之前会导入脚本。它可以工作,因为我已经尝试回显包含文件中的一些文本,在收到错误之前,这些文本会显示在我的屏幕上。我将试着把它归结为一个简化的版本…:)在
import()
函数中是否有
require\u once()
?我想这可能是您的问题
$templateAdmin
被困在
import
函数中。嗯。。。谢谢玻璃机器人!我得调查一下。理想情况下,我希望使用
import('templates.TemplateAdmin')
作为
require\u once(/*完整路径*/)
的快速替代方法,而不将其内容分配给变量,并使其以完全相同的方式运行。你知道这种事情是可能的吗?