-2

これはよくある質問だと思い、自分で解決しようとしましたが、他の回答の指示に従ってもうまくいきません。したがって、これが問題です。ClassTwoのClassOneクラスからメソッドを呼び出す必要があります。だから私はこれをしました:

class ClassOne{
    public function methOne($par1,$par2){
        mysql_query("insert into ps_loyalty_events (customer_id,event_id) values ('$par1','$par2') ") or die(mysql_error());
    }
}

class ClassTwo{
    private $customer;    //initialize $customer in the constructor, to be defined as an instance of ClassOne() class and used as $this->customer

    function __construct() {
        $this->customer = new ClassOne();
    }

    public function methTwo(){
        //some stuff here
        $this->customer->methOne(6,10);    //6,10 - randomly chosen parameters, irrelevant
        //some more stuff here, this doesn't get executed at all
    }
}

次の方法で通常のPHPファイルから直接呼び出すことが機能するため、priblemはClassOneまたはメソッドmethOne()にはありません。

$customer = new ClassOne();
$customer->methOne(6,10);

ただし、ClassTwoメソッドから呼び出すと、何も実行されません。関数の実行が停止するだけです。try-catchを使用しても、何も出力されないようです。私は何が間違っているのですか?

4

2 に答える 2

0

それはあなたmethTwoが静的だからです。$this->customerクラスの静的メソッドを呼び出すと、そのクラスはオブジェクトにインスタンス化されないため、プロパティがありません。

静的メソッドに理由がない限り、次のように変更できますmethoTwo

public function methTwo(){

編集:それを修正したので、何が機能していないと思いますか?では何もしませんmethOne

与えられたコードは問題ありません。このコードパッドの動作デモを参照してください。これは、問題の原因となっている他のコードが見えないことを意味します。

于 2012-11-30T12:19:05.447 に答える
-1

簡単な解決策として、デフォルトですべてのメソッドがclasstwoで使用できるように、classtwoでextend classoneを使用してみてください

class class_two extends class_one

何よりも、クラス 1 のメソッドはクラス 2 にアクセスされ、それも簡単に使用できます。それを試してみてください

于 2012-11-30T12:28:05.293 に答える