私はウェブサイトで作業していますが、現在ログイン/セッション処理の段階です。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私にあなたのデザインを与えることができます。
ありがとうございました
どちらの方法でも、最初の方法はあまりうまくいかないでしょう。 define()メソッドは大域定数を設定するためのものです。したがって、方法1を使用すると、決して正常にログインすることはできません。 – Norguard
ドキュメントを読み、CIの[タンク認証](http://konyukhov.com/soft/tank_auth/)のコードを確認することを強くお勧めします。 –
手続き型プログラミング(第1の例)またはオブジェクト指向(第2の型)を使用する必要があるかどうかを聞いてください。その違いを読んで、好きなものを見つけてください。 OOはときどき頭を上げるのが難しいですが、大規模なプログラムを追跡するのが簡単になります。 –