1

私が OOP プログラミングの初心者であることをお伝えする前に、気楽に話してください。

私は現在、PHP フレームワークに取り組んでおり、1 つのエントリ ポイントを介してトラフィックをルーティングすることができました。これが下の構造です。

index ----> bootstrap ----> router ----> controller

こちらがメインコントローラー…

class controller {

protected $_model;
protected $_controller;
protected $_id;
protected $_view;

function __construct($controller,$model,$view,$id=NULL) {

    $this->_controller = $controller;
    $this->_id = $id;
    $this->_model = $model;
    $this->_view = $view;

    $this->$model = new $model;
    $this->_view = new view;
}

function filter($data) {

    $data = trim(htmlentities(strip_tags($data)));

    if (get_magic_quotes_gpc())

    $data = stripslashes($data);
    $data = mysql_real_escape_string($data);

return $data;

}

function set($name,$value) {
    $this->_view->set($name,$value);
}

function __destruct(){
    $this->_view->render();
}

}

私の構成関数では、設定することを想定しています...

$this->$model = new $model;$this->_view = new view;

しかし、どちら$this->_view->render();かを実行すると$gamerequests_array = $this->main_model->tab_query($tab);

オブジェクトが存在しないと表示されます。これが私が得る正確なエラーメッセージです。

Notice: Undefined property: main_controller::$main_model

Fatal error: Call to a member function tab_query() on a non-object

したがって、この時点で、問題は新しいオブジェクトをセットアップするフレームワークにあることがわかります。私はこれを理解しようとしてきましたが、この時点で助けが必要です。

追加のコードが必要な場合は、お気軽にリクエストしてください。投稿します。

4

2 に答える 2

2

この行から:

$this->$model = new $model;

文字列を渡し、それをプロパティ名とクラス名の両方として使用しているように見えます。おそらく、正確ではない名前を渡していますmain_model。変数/プロパティ名は大文字と小文字が区別されますが、クラス名は区別されません。そのため、大文字と小文字が一致しない可能性があります。通過$thisしてget_object_vars、利用可能なプロパティを確認します。この方法でプロパティを動的に追加すると、プロパティが公開されることに注意してください。

これらの行も調べる必要があります。

$this->_view = $view;

$this->_view = new view;

プロパティを上書きしています。これは意図的ではなく、発生している問題の一部である可能性があります。おそらく、コントローラーで行ったのと同じアプローチを使用しようとしています (ストア名、インスタンス化とアクセスに使用)。

于 2012-04-25T20:26:58.767 に答える
0
$this->$model = new $model;

これは、$model の値が既に設定されているプロパティである場合にのみ機能する可能性があります。つまり、値「_controller」、「_id」、「_model」、および「_view」のみを含めることができます。そうしないと、エラー ( Notice: Undefined property: main_controller::$main_model and Fatal error: Call to a member function tab_query() on a non-object) が発生します。これらの値のいずれかが含まれていても、設定したものはすべて上書きされます。プロパティとして。

$viewビューを何かとして動的に設定しようとしている場合は、View コンストラクターに引数として渡したい場合があります。

$this->_view = new view($view);

$view適切なオブジェクトを返すケース スイッチを持つグローバル関数または View クラスのメソッドのいずれかを介して、継承を通じてのさまざまな値にさまざまな動作を設定することで、それをさらに拡張できます。

于 2012-04-25T20:37:10.003 に答える