开发者

PHP Method Disappears?

I am including one PHP script into another using PHP's require_once() met开发者_StackOverflow社区hod. This script contains a class, TemplateAdmin, which instantiates itself right after the script, like this:

class TemplateAdmin {
// Class body...
}

$templateAdmin = new TemplateAdmin();

This was working fine for a while. However, I have adopted a new importing technique to include classes and packages. I have tested this new technique, and it works! However, for some strange reason, none of the methods in any of the classes I import are there when I need them. However, it seems as though the instance variables are still there.

For example, when a class with this absolute path is called:

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

... I get this error in the call stack:

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

This error is referring to my use of the top() method inside of the TemplateAdmin class.

Does any one have any idea as to why this is happening??? If this helps, I have been using require_once() all along, I am running PHP 5.3.5 on a Windows XP Media Center machine.

Thank you for your time!


Assuming you dont want to use globals here is one way that only requires a few changes.

TemplateAdmin.php:

class TemplateAdmin {
// Class body...
}

return new TemplateAdmin();

Return include once in import:

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");
  }
}

Assign the variable:

$adminTemplate = import('templates.TemplateAdmin');


I have a feeling your php error message is accurate. I know on your stripped down version, you pieced it together how you're sure it's setup but it's obviously not a direct copy/paste since it's like:

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

So, the error message says that the method "top" is not defined. If it were not including your file properly, it would tell you that the class you instantiated doesn't exist. Either that method does not exist in the class you think it is, or the method has been unset somewhere in that object instance. Trust your error message.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜