1
のC#-esqueプロパティを作成し、私が持っている:でダム実験 - 私は今PHP</p> <p>のC#-esqueプロパティを作成するために、優雅な方法を考え出すしようとしているPHP
class Example
{
private $allowedProps = array('prop1', 'prop2', 'prop3');
private $data = array();
public function __set($propName, $propValue)
{
if (in_array($propName, $this->allowedProps))
{
// set property
}
else
{
// error
}
}
public function __get($propName)
{
if (array_key_exists($propName, $this->data))
{
// get property
}
else
{
// error
}
}
}
をコメントアウトされたセクションは、単に$data
アレイに書き込んだり取り出すよりも複雑な場合は、if-else
またはswitch
でロジックを必要に応じて分岐するのが最も簡単です。しかし、それは面倒です、そして、私が欲しいものに逆らって走ります。 $data
配列にアクセスできるコールバック関数を呼び出す方法はありますか?
EDIT:
class Example
{
private $allowedProps = array('prop1', 'prop2', 'prop3');
private $data = array();
public function __set($propName, $propValue)
{
$propName = strtolower($propName);
if (in_array($propName, $this->allowedProps))
{
$funcName = "set" . ucfirst($propName);
$this->$funcName($propValue);
}
else
{
// error
}
}
public function __get($propName)
{
$propName = strtolower($propName);
if (array_key_exists($propName, $this->data))
{
$funcName = "get" . ucfirst($propName);
$this->$funcName();
}
else
{
// error
}
}
private function getProp1()
{
// do stuff, and return the value of prop1, if it exists
}
// ...
}
私はプライベートsetterメソッドとgetterメソッドのホストを持つことが移動するための方法であるかどうかわからないんだけど:最も簡単な方法は次のようになりますように思えます。 Lambdaはおそらく理想的ですが、PHP 5.3以降でのみ利用可能です。
例[here](http://forums.whirlpool.net.au/archive/953482)の行に沿って何かを使用できますか?また、この質問に興味があるかもしれません:[私はどのようにPHPでコールバックを実装するのですか?](http://stackoverflow.com/questions/48947/how-do-i-implement-a-callback-in-php) – R0MANARMY
By方法、プロパティを作成するC#の方法は、get_Foobar()メソッドとset_Foobar(val)メソッドを持つことです。実際に、これらのメソッドをクラスに作成してコンパイルすると、ゲッターとセッターで単一の「Foobar」プロパティとして表示されます。 –
真実ですが、明示的なセッター/ゲッターメソッドに頼らずに、個々のクラスデータメンバーごとに何か複雑なことができるかどうかを確認しようとしています。 $ stock-> GetUpdatedQuote()よりむしろ$ stock-> GetQuoteQuote() –