PHPユーザー登録システムの実践

3047 ワード

から出る
本を借りて、『PHP&MySQLサンプル精解——作成、修正、再利用』.2008年に出版された古い本ですが、私のような初心者にとっては役に立ちます.結局、基本的な設計思想は時代遅れではありません.
ディレクトリ構造設計
本の中で、開発の過程の第一歩はプログラムのディレクトリ構造を設計することだと言っています.次の3つのメインフォルダを作成することをお勧めします.
  • public_files:パブリックアクセス可能なページを保存します.
  • lib:他のファイルで呼び出すことができる参照ファイルを保存します.
  • templates:ページ表示ファイルを保存します.

  • Webサーバはpublic_へのアクセスのみを許可filesの下のファイルは、システムのセキュリティを強化します.
    データベース設計
    使用回数が少なく、1回のみのデータを1つのテーブルに個別に保存し、データの冗長性を回避するためにタイムリーに削除します.たとえば、この本では、ユーザーのアクティブ化に関する情報を1つのテーブルに個別に配置します.これらの情報はアクティブ化時に一度しか使用されないので、使い終わったら削除します.
    共有コードの作成
    共有するコードとリンクデータベースのコードをそれぞれ1つのファイルに存在させ、コードの再利用度を高め、他のファイル呼び出しを便利にする.
    Userクラスの設計
    MVC思想ではこの部分はモデルの設計に属する.クラスを設計するときは、オブジェクト向けプログラミングでは、オブジェクトが生活中のエンティティに対応していることを覚えておいてください.クラスのプロパティはオブジェクトを記述するために使用され、クラスのメソッドはオブジェクトを直接操作したり、オブジェクトに関連する操作をしたりするために使用されます.1つのユーザクラスについては、まずユーザID、ユーザ名、パスワードなどのユーザ情報が必要であり、そのクラスの属性である.また,ユーザの検索,作成,更新,アクティブ化などの操作が必要であり,それに対応する方法がある.
    属性のリロード
    この本では、リロードされたリラックスを使用して、プロパティを動的に作成します.このような利点は、後でいくつかの属性を追加してコードを変更することなく、追加する必要がある属性を直接呼び出すとよいことです.リロードを使用してプロパティを動的に作成するのは、直接再コードに新しいプロパティを追加するのとは異なります.属性のリロードはマジックメソッドを利用しています_get()と_set().非アクセス属性(未定義または非表示)に値を割り当てる場合、_set()が呼び出されます.アクセス不可属性の値を読み込むとき_get()が呼び出されます.一般パス_set()リロードされた属性のデータをプライベート配列フィールドに保存し、リロードされた属性を読み込む必要がある場合に_get()は、このプライベート配列フィールドから読み出されます.サンプルコードは次のとおりです.
    class User
    {
        private $uid;
        private $field;
    
        //initialize a User object
        public function __construct()
        {
            $this->uid = null;
            $this->field = array('username' => '',
                'password' => '',
                'emailAddr' => '',
                'isActive' => false);
        }
    
        //override magic method to retrieve properties
        public function __get($field)
        {
            if($field == 'userId'){
                return $this->uid;
            }else{
                return $this->field[$field];
            }
        }
    
        //override magic method to set properties
        public function __set($field, $value)
        {
            if(array_key_exists($field, $this->field)){
                $this->field[$field] = $value;
            }
        }
    }
    

    PHPでのリロードが他の言語と異なることに注意してください.他の言語のリロードは、一般に、同じ関数名と異なるパラメータの個数を指し、同じ名前の複数の関数を実現します.PHPリロードの詳細についてはPHPマニュアル:リロード
    データの検証
    データを処理する前に、データの検証が必要です.データが私たちが望んでいるように検証された後、データを処理します.予期せぬエラーが発生する可能性があります.初心者は往々にしてこの点を無視するかもしれない.例えば、PHPのコードでは、ある量が空であるかどうかを検出し、空でない場合に操作することがよくあります.
    動的SQL文
    検索、保存などの方法は、動的なSQL文を使用する必要があります.この本はsprintf()関数によって実現される.sprintf()関数はC#のStringと似ている.Format().しかし、この方法は少し煩わしくて、個人的には今もっと良い方法があると思います.sprintf()関数を使用して動的SQLを実装する場合、複雑な文字列パラメータにはreal_を使用する必要があります.escape_string()関数は、コードのセキュリティを確保するためにエスケープされます.(符号化の問題は一般的にSQL注入と関係があるようです).
    かたわく
    テンプレートを使用して、論理とページ設計を分離します.この本はここで簡単なテンプレートを使った:ページの各部分の内容を$GLOBALS配列に保存し、テンプレートファイルは各部分で配列の内容を直接出力する.したがって、ページを動的に表示するには、$GLOBALSの内容を変更し、テンプレートファイルを表示するだけでよい.
    締めくくり
    本文は1篇の简単な学习の笔记で、主に自分で考えを整理することを助けて、もし他の人に対してもいくつか助けがあるならばもっと良いです~【markdownで物を书くのも确かにとても爽やかです