2011-10-18 15 views
1

私はウェブサイトで作業していますが、現在ログイン/セッション処理の段階です。PHP設計アドバイス

私はあなたの意見でより良いデザインが何かを知りたいと思います。 (このウェブサイトは公開されているので、ユーザーフレンドリーでなければなりません)。

P.S.申し訳ありませんが、これは正しいPHPの慣習ではない、私はc/c + +プログラミングに慣れています。

デザイン#1:

define("LOGGED_IN", false); 
define("USERNAME", "Guest"); 
define("PASSWORD", ""); 
define("PLAYER_ID", -1); 

... 

if (!LOGGED_IN) { 
    header("Location: login.php"); 
} else { 
    ... 
} 

... 

if ({condition for successful login}) { 
    define("LOGGED_IN", true); 
    define("USERNAME", "AJ"); 
    define("PASSWORD", "nottellingu"); 
    define("PLAYER_ID", 1); 
} 

... 

printf("Hi, %s. Have a nice day.", USERNAME); 

デザイン#2:

class user { 
    private $id; 
    private $logged_in; 
    private $username; 
    private $password; 

    public function __construct($id, $username, $password, $logged_in = false) { 
     $this->id = $id; 
     ... blablabla 
    } 

    public function get_id() { 
     return $this->id; 
    } 

    ... blablabla (pretend i declared all needed functions) 
} 

... 

if ({condition for successful login}) { 
    $id = get_userid($_SESSION['USERNAME']]); 
    $user = new user($id, $_SESSION['USERNAME'], $_SESSION['PASSWORD'], true); 
} 

... 

printf("Hi, %s. Have a nice day.", $user->get_username()); 

あなたはaswell私にあなたのデザインを与えることができます。

ありがとうございました

+1

どちらの方法でも、最初の方法はあまりうまくいかないでしょう。 define()メソッドは大域定数を設定するためのものです。したがって、方法1を使用すると、決して正常にログインすることはできません。 – Norguard

+1

ドキュメントを読み、CIの[タンク認証](http://konyukhov.com/soft/tank_auth/)のコードを確認することを強くお勧めします。 –

+1

手続き型プログラミング(第1の例)またはオブジェクト指向(第2の型)を使用する必要があるかどうかを聞いてください。その違いを読んで、好きなものを見つけてください。 OOはときどき頭を上げるのが難しいですが、大規模なプログラムを追跡するのが簡単になります。 –

答えて

1

いずれかの方法は問題ありません。それは本当にあなたが達成しようとしているものに依存します。あなたが一貫してユーザー情報を取得しようとするならば、クラスはより良いかもしれません。あなたがIDと名前のような基本的なものとログインしているかどうかのような基本的なものが必要な場合は、最初のオプションは単純で、その目的のためにうまくいくでしょう。

簡単なやり方でやり遂げることができれば、何かを複雑にすることはありません。

1

IMO、デザインアプローチ#2が優れています。ユーザー関連のものはすべてカプセル化されているだけでなく、モジュール化されているので、コードベース全体の任意の属性を参照できます。

Google検索エンジンを使用してスタンドアローンのユーザーログインシステムがあるかどうかを確認したり、ホイールを再発明したりすることもできます。

関連する問題