ホームページ  >  記事  >  バックエンド開発  >  泣く泣くディスプレイ戦略を求めて

泣く泣くディスプレイ戦略を求めて

WBOY
WBOYオリジナル
2016-06-13 12:58:00692ブラウズ

ティアーズフォー表示戦略
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);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。