ティアーズフォー表示戦略
1.
oop によって作成された conn クラスは mysql に接続し、データベースを使用するシステム内のすべてのクラスはそれを拡張します。
このコンテンツの一部を以下でご覧ください:
<br />
class db{<br />
public $conn;<br />
private static $h = "localhost";<br />
private static $u = "root";<br />
private static $p = "123123";<br />
public $db = "wms";//此外是变化的,换句说wms不是固定的,是变化的。user1登录时,$db="user1";user2登录时,$db="user2";<br />
ログイン後にコピー
2.
$db は変更されるものであり、修正されるものではないためです。最初は$db=$_SESSION['user']を使用しましたが、クラス内でセッションを使用できません。
これを達成するにはどうすればよいでしょうか?
3.
この方法を除いて。
$obj=new db($db);//デストラクター経由。この方法は使用できません。その他の理由により、使用することはできません。
------解決策------
1. このように継承リンククラスを完成させます
require_once 'db.php';<br />
class userDao extends db{}
ログイン後にコピー
2. ① このようにデータベースを設計しないのが最善です。LZ は、さまざまな状況を考慮する必要があるため、複数のテーブルまたは複数のフィールドを使用する必要があります。
② セッションの値を処理のためにクラスに転送したい場合は、まず PHP 処理ページ (通常、これをコントロール層と呼びます) を通過し、アクセス クラスのメソッドを通過する必要があります。
例: user1 がログインした後、処理ページは 1 としてマークされます。データベースにアクセスする前に、どのデータベースを呼び出すかを認識できるようにクラスに 1 を渡します。ただし、データベースをあまり複雑に設計しないことをお勧めします。
3. LZ がデストラクターでオブジェクトをインスタンス化するのはなぜですか?一般に、デストラクターはオブジェクトを破棄し、スペースを解放するために使用されます。 LZ がオブジェクトを初期化したい場合は、コンストラクターで行う必要があります。
__construct()
------解決策----------------------
そもそもコンストラクターが使えないのはなぜですか…… ……
-----解決策---------
そう言いましたよね
値を渡す独自の init 関数を作成します
$db = new mydb();
$db->init($dbname);
-----解決策---------
1 男、本物の男、簡単に泣くなよ~
2 これらの問題は、学習や研究の問題として問題ありません。深いスキルを持たずに実際に製品プロジェクトを開発する前に、フレームワークを使用することから始めることをお勧めします。
フレームワークでは、db クラスは通常適切にカプセル化されているため、あまり心配する必要はありません。
------解決策---------
$obj = new db();
$obj->db = $_SESSION['ユーザー'];
パブリック属性なので値を直接代入してください
-----解決策---------
値を渡す独自の init 関数を作成します
$db = new mydb();
$db->init($dbname);