0

phpオブジェクト参照がどのように機能するのか誤解しています。PHP 5では、オブジェクトの参照割り当てが自動的に行われることを理解しています。非オブジェクトに対して参照割り当てがどのように機能するかを理解しています。

オブジェクトインスタンスへの参照をメソッドから呼び出し元のコードに渡し、インスタンス参照を使用してそのクラスのメソッドを呼び出したいと思います。

これを試みると、次のようになります。

致命的なエラー:...内の非オブジェクトでメンバー関数update_Sessions_For_Schedule()を呼び出します。

私は多くの同様のSO投稿を読みましたが、なぜこれができないのかを詳しく知ることはできません。

だから私が持っているのは:

class Scheduleは、クラスTime_Tablerを使用して、作成を許可する前に新しいスケジュールをタイムテーブルに追加できることを確認します。したがって、明らかにこのプロセス中にTime_Tablerがインスタンス化されます。

スケジュールをインスタンス化したphpコードからこのインスタンスにアクセスし、そのインスタンスを使用してメソッドupdate_Sessions_For_Schedule()を呼び出したいと思います。

だから私はクラスScheduleにメソッドget_Checked_Time_Table()を持っています:-

私はこれを2つの形式で試しました。

明示的な参照割り当てあり:

public function &get_Checked_Time_Table(){
    global $test_Time_Tabler;
    return $test_Time_Tabler;
}

ここで、$ test_Time_Tablerは、以前のクラスのScheduleメソッドでインスタンス化されます。

によって呼び出されます

    $tested_Time_Table =& $complete_Schedule->get_Checked_Time_Table();

明示的な参照割り当てなし:

public function get_Checked_Time_Table(){
    global $test_Time_Tabler;
    return $test_Time_Tabler;
}

ここで、$ test_Time_Tablerは、以前のクラスのScheduleメソッドでインスタンス化されます。

によって呼び出されます

$tested_Time_Table = $complete_Schedule->get_Checked_Time_Table();

どちらの場合にも

$tested_Time_Table->update_Sessions_For_Schedule($update_As_Insert);

致命的なエラーが発生します。

参照がTime_Tablerクラスのオブジェクトとして認識されず、メソッドを呼び出すことができる理由がわかりません。

どんな考えでも歓迎します。

4

1 に答える 1

0

この問題は解決しました。

問題の解決策は、いつものようにばかばかしいほど単純でした。インスタンスは永続化されていなかったため、参照したいときには存在しませんでした。

そのため、参照の時点でインスタンスがまだ存在していることを確認するために、インスタンスのクローンを作成しました。

于 2012-10-04T10:43:55.813 に答える