-1

私はPHPMVCに取り組んでいますが、設計の特定の側面を処理するのに苦労しており、すべてのユーザーがユーザー情報に簡単にアクセスできるようにすることは本当に困惑しています。

私は抽象クラスとしてUserを持っていたので、あなたはそれを使うことができましUser::getUserId()たが、それが正しい方法であるかどうかわかりませんか?

次のように変更しましたが、動作しません。

問題

実行するたびにUserクラスをインスタンス化する基本的なコントローラーがあるとします。

コントローラ

class controller{

    public $user;

    function __construct(){

        $this->user = new User();
        $user->sessionRefresh();
        $user->getUserId();

    }
}

次に、インスタンス化されたUserモデルクラスがあります。

ユーザーモデルクラス

class User{

    var $userId;

    function sessionRefresh(){

        if (isset($_SESSION['userId']) && $_SESSION['created'] + 15 * 60 < time())                  
            session_regenerate_id();
    }

    function getUserId(){

        $this->userId = $_SESSION['userId'];
    }
}

次に、デフォルトのコントローラーを拡張するコントローラーがさらにあります。

フォーラムコントローラー-私が試していることをデモするための非常に基本的な

class forumcontroller extends controller{

    function __construct(){

        require 'templates/forum.php';
    }

}

フォーラムテンプレート-非常に基本的な例

<html>
<title>Forum</title>
<body>
    <div>Welcome User: <?=$user->userId;?></div>
</body>
</html>

私がしていることは完全に間違っていますか?

私は最近、PHPで手続き型からmvc / oopに飛躍しようとしましたが、それでも混乱していることは明らかです。

4

2 に答える 2

2
  1. $this->user->userId;の代わりに使用$user->userId;

  2. エコーする必要があります...。<? echo $user->userId; ?>

  3. 誰かが助けている間はコードの編集をやめてください

  4. 反対票のThx

于 2012-10-30T16:40:01.137 に答える
0

はい、MVCデザインパターンに関しては、あなたがしていることは完全に間違っています。部分的には、MVCが高度なパターンであるという事実に関連しています。OOPをしっかりと理解するまでは、それを使おうとさえしないでください。

だから..あなたのコードの問題。

  • includeまたはを使用する場合require、「埋め込み」したファイルは、それが使用されたスコープ内にあります。可変スコープテンプレートについて読む

  • モデルはクラスでもオブジェクトでもありません。これは、さまざまなタイプの構造の複数の構造を含むレイヤーです。これは短いバージョンをカバーする必要があります。

  • インスタンスとの相互作用Userは、モデル層の責任であるドメインビジネスロジックの一部になります。これはいずれもプレゼンテーション層(ほとんどがビュー、コントローラー、テンプレートで構成されています)に含めるべきではありません。

  • ビューはテンプレートではありません。MVCデザインでは、パターンビューは、ほとんどのユーザーインターフェイスロジックを担当する構造です。返される応答の種類を決定します(複数のテンプレートで構成されるHTML、一部のXMLまたはJSONファイル、場合によってはHTTPヘッダーのみ)。

  • このvarステートメントは、クラス変数を定義するためにPHP4で使用されました。PHP5には、、、がpublicありprivateますprotected

  • 一般に、クラスにパブリック変数を含めるべきではありません。カプセル化を解除します。

  • クラスコンストラクターは計算を実行しないでください。コードのテストが難しくなります。

アップデート

要点は次のとおりです。**MVCから少なくともあと3か月は離れてください*。MVCデザインパターンを十分に活用して理解するには、OOPについてさらに多くを学ぶ必要があります。

この投稿の下部にある資料のリストをお勧めします。最初の2冊の本から始めて、講義を見てから、PoEAA(リストの最後の1冊)の本を見てください。

于 2012-10-30T16:56:05.663 に答える