2011-07-11 7 views
2

PHPのrequire_once()メソッドを使用して、1つのPHPスクリプトを別のPHPスクリプトに組み込んでいます。これは、しばらくの間、正常に動作してPHPメソッドが表示されませんか?

class TemplateAdmin { 
// Class body... 
} 

$templateAdmin = new TemplateAdmin(); 

:このスクリプトは次のように、右のスクリプトの後に自分自身をインスタンス化するクラス、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_once()を使用しています。Windows XP Media CenterマシンでPHP 5.3.5を実行しています。

ありがとうございました!

+2

あなたが完全な関連するソースを表示することができればそれがベストだろうコード(あなたはどこでtop()を呼んでいますか?)を指定します。 –

+0

あなたのコードを最小限に抑えることができますか? lテストケースを作成し、ここに投稿しますか? –

+0

スクリプト全体を含めるには時間がかかりすぎますが、メソッドが呼び出される前にスクリプト*がインポートされていることを確認できます。画面に表示されるインクルードファイル内のテキストをエコーし​​てみました私はエラーを受け取る前に。私はこれを単純化されたバージョンに煮詰めようとします:) –

答えて

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'); 
+0

うーん...ガラスロボットに感謝!私はこれを調べなければならないでしょう。理想的には、 'require_once(/ * The full path * /)'の簡単な代替手段として 'import( 'templates.TemplateAdmin')'を使用し、その内容を変数に代入せずに、まったく同じように。あなたはそのようなことが可能であることを知っていますか? –

0

あなたのPHPエラーメッセージが正確であると感じました。私はあなたはそれがセットアップだが、それは以下のようなので、それは明らかに直接コピー/貼り付けではありません確信しているどのようにそれを一緒につなぎ、あなたのストリップダウンバージョンに知っている:だから

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

、エラーメッセージが法「トップと言っています" 定義されていません。ファイルが適切に含まれていない場合、インスタンス化したクラスが存在しないことがわかります。そのメソッドがあなたが思うクラスに存在しないか、そのメソッドがそのオブジェクトインスタンスのどこかで未設定になっています。エラーメッセージを信頼してください。

関連する問題