0

編集:解決しました!

最近は自分のフレームワークに取り組んでいます。私はこのようなコントローラークラスを持っています:

class Controller {
    private $model;

    public function __construct() {
        global $bean_db, $mv_name;

        if (file_exists(APP_PATH . 'models/' . $mv_name . '.php')) {
            require APP_PATH . 'models/' . $mv_name . '.php';

            $model_name = $mv_name . '_Model';
            $model = new $model_name;
            $this->model = $model;
        }
    }
}

さて、特定のコントローラーファイルに、次のようなコードがあります。

class Start_Controller extends Controller {
    function execute() {
        $this->model->exec("SET NAMES 'utf8'");
    }
}

あなたが期待するかもしれないし、しないかもしれないように、それはうまくいきませんでした。「model」という名前のプロパティが存在しないというエラーメッセージが表示されます。誰かが私がこれを解決するのを手伝ってもらえますか?

4

3 に答える 3

7

private変数はこのクラスのみに制限されており、子には制限されていないためです。この場合に
必要ですprotected

于 2012-04-17T19:42:56.910 に答える
1

ではmodel protectedなく作成しprivateます。これは当面の解決策ですが、コントローラーがモデルにアクセスする方法を作り直すこともできます。

于 2012-04-17T19:42:47.227 に答える
0

プライベートメンバーは、宣言されたクラス専用です。サブクラスであっても、他の場所からはアクセスできません。

これは、2つの方法のいずれかで克服できます。

  1. プライベートメンバーを保護する
  2. プライベートメンバーに保護されたゲッターを提供する

通常は前者を実行しますが、後者の方が賢明なアプローチである場合もあります(たとえば、メンバーへの読み取り専用アクセスが必要な場合)。

于 2012-04-17T19:45:07.693 に答える