2

require_once()PHPのメソッドを使用して、ある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 XPMediaCenterマシンでPHP5.3.5を実行しています。

お時間をいただきありがとうございます!

4

2 に答える 2

1

ここでグローバルを使用したくないと仮定すると、いくつかの変更のみが必要な 1 つの方法になります。

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');
于 2011-07-11T23:05:50.263 に答える
0

あなたのphpエラーメッセージは正確だと思います。削除されたバージョンで、セットアップが確実に行われるようにまとめましたが、次のようなものであるため、明らかに直接のコピー/貼り付けではありません。

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

したがって、エラーメッセージには、メソッド「top」が定義されていないことが示されます。ファイルが適切に含まれていない場合は、インスタンス化したクラスが存在しないことを示します。そのメソッドがあなたが思っているクラスに存在しないか、そのオブジェクトインスタンスのどこかでメソッドが設定解除されています。エラーメッセージを信頼してください。

于 2011-07-11T22:54:58.707 に答える