-1

このコードを使用しようとすると、エラーが発生します。

私のコード:

require_once 'functions/general.functions.inc';

class AccessingNodes {

    function getNodeId($parent_id){
        $node_id = $this->getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
        return $node_id;
    } 

}

そのインクルードファイルの機能にアクセスできません。エラーが発生します。

エラー :

致命的なエラー 未定義のメソッド AccessingNodes::getNodeIdByParentId への呼び出し

general.functions.inc は誰かによって定義されています。ここに何が欠けているのかわかりません。SOの以前の投稿に対する回答を得ました。その中で、.inc ファイルの関数をファイル自体の関数として扱うことができると言われました。$thisだから私は演算子を使用して関数を呼び出しました。

誰でもこれを克服するために私を導いてください。

4

2 に答える 2

2

.incファイル関数は、ファイルの独自の関数として扱うことはできますが、クラスの独自の関数として扱うことはできません。

$ thisを削除すると、コードが機能するはずです。

于 2013-02-01T08:28:56.577 に答える
2

の誤解があり$thisます。$this呼び出しオブジェクトへの参照です。したがって、クラスを拡張するクラスAccessingNodesがなく、メソッドがgetNodeIdByParentIdあり、含まれているスクリプトで言及されているクラスのインスタンスからメソッドgetNodeIdが呼び出されない限り、それを呼び出すことはできません。(注:親クラスは子クラスについて何も知らないはずなので、これはひどい設計です)

それでは、そのファイルの中身を見てみましょう。

  1. 関数のみが定義されている場合は、関数のように使用します。例えば

    function getParentIdByParentId($id) { }
    
    class AccessingNodes {
    
         function getNodeId($parent_id){
              $node_id = getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
              return $node_id;
         } 
     }
    
  2. あるクラスの静的メソッドの場合:

     class MyClass {
        public static function getNodeIdByParentId($id) {}
     }
    
     class AccessingNodes {
    
        function getNodeId($parent_id){
            $node_id = MyClass::getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
            return $node_id;
        } 
    }
    
  3. メソッドを持つクラスがある場合getNodeIdByParentId、そのインスタンスを作成してそのメソッドを呼び出します。

    class MyClass {
        public function getNodeIdByParentId($id) {}
    }
    
    class AccessingNodes {
    
        function getNodeId($parent_id){
            $obj = new MyClass;
            $node_id = $obj->getNodeIdByParentId($parent_id); // This function is defined in general.functions.inc file
            return $node_id;
        } 
    }
    

ps 詳細については、マニュアルを読み、 OOP の概念を見てください。

于 2013-02-01T08:31:56.950 に答える