各パブリック メソッドの前に実行されるメソッドが必要です。
public メソッドの __call のようなメソッドはありますか?
セッター メソッドの前にすべての引数を削除したいと考えています。
__call
いいえ、パブリック メソッドのようなメカニズムはありません。しかし__call()
、すでにあなたが探しているものです。
以下を使用して「疑似パブリック」インターフェースを定義します__call
。
class A {
protected $value;
/**
* Enables caller to call a defined set of protected setters.
* In this case just "setValue".
*/
public function __call($name, $args) {
// Simplified code, for brevity
if($name === "setValue") {
$propertyName = str_replace("set", "", $name);
}
// The desired method that should be called before the setter
$value = $this->doSomethingWith($propertyName, $args[0]);
// Call *real* setter, which is protected
$this->{"set$propertyName"}($value);
}
/**
* *Real*, protected setter
*/
protected function setValue($val) {
// What about validate($val); ? ;)
$this->value = $val;
}
/**
* The method that should be called
*/
protected function doSomethingWith($name, $value) {
echo "Attempting to set " . lcfirst($name) . " to $value";
return trim($value);
}
}
例を試すと:
$a = new A();
$a->setValue("foo");
... 次の出力が得られます。
Attempting to set value to foo