2009-05-18 8 views
1

例えば、私はユーザのデータベースを持っているとしましょう。私はこれらのユーザーについてデータベースから情報を取得するクラスを持っています。PHPオブジェクトを変数名に応じて異なる動作にする

私はこのように、それ自身の名前の「自己意識」クラスを作りたい:

<?php 

class UserData { 

//[code that fetches the ID number from the variable name, and queries the database for info] 

} 

$user24 = new UserData; 
echo 'Welcome, '.$user24->name.'!'; 

?> 

このコードでしょう、理想的には、のような何かを出力とに応じて変化するであろう「ボブ、ようこそ!」私が名前を付けたものこれは可能ですか?

答えて

3

でも(私はそう思わない)、あなたはしないでください。他の人は魔法をたくさん見て、デバッグするのは難しいでしょう。可能な限り標準と既知のアイデアやパターンに固執する。

あなたが使用したくない理由:

$user = new UserData(24); 

またはより良いを(あなたは、コンストラクタ内の任意のブロック操作を行うべきではありませんので):

$user = UserData::getById(24); 
+0

2番目のコードはPHPでは動作しません。 –

+0

私は静的呼び出し構文を修正しました。 – viraptor

+0

ありがとう、私はあなたがそのような__construct()関数に引数を渡すことができるか分からなかった。 –

6

特定のオブジェクトが複数の名前を持つ可能性があるため、これは現代のプログラミング言語では一般的に有効な手法ではありません。たとえば、ユーザー25がユーザー24とは異なる名前を持っていると仮定すると、次のコードを印刷するにはどうしますか?

$user24 = new UserData; 
echo 'Welcome, '.$user24->name.'!'; 
$user25 = $user24; 
echo 'Welcome, '.$user25->name.'!'; 

それだけでなく、あなたがいない名前のオブジェクトを持つことができます。

echo 'Welcome, '.(new UserData)->name.'!'; 

オブジェクトコンストラクタは、あなたが扱っているユーザーにそれを伝えるパラメータを取る必要がありますより多くの典型的な実装、

$user = new UserData(24); 
echo 'Welcome, '.$user->name.'!'; 
1

値(たとえば、オブジェクト)の変数名との関係は1対多です。つまり、1つの値が複数の名前を持つ場合があります。各値は同じ値への参照です。それは全く名前をもたないかもしれません。つまり、それは式(新しい式、例えばオブジェクトを返します)です。したがって、値の名前をプログラムで見つけることはできません。値は複数の名前を持つことも、名前を持たないこともあります。

関連する問題