魔法のメソッド__callを使用して実験を行いました。(他の回答やコメントにある「魔法の方法を使用しないでください」という警告があるため)投稿する必要があるかどうかはわかりませんが、誰かが役に立つと思った場合に備えて、ここに残しておきます。
public function __call($_name, $_arguments){
$action = substr($_name, 0, 4);
$varName = substr($_name, 4);
if (isset($this->{$varName})){
if ($action === "get_") return $this->{$varName};
if ($action === "set_") $this->{$varName} = $_arguments[0];
}
}
上記のメソッドをクラスに追加するだけで、次のように入力できます。
class MyClass{
private foo = "bar";
private bom = "bim";
// ...
// public function __call(){ ... }
// ...
}
$C = new MyClass();
// as getter
$C->get_foo(); // return "bar"
$C->get_bom(); // return "bim"
// as setter
$C->set_foo("abc"); // set "abc" as new value of foo
$C->set_bom("zam"); // set "zam" as new value of bom
このように、存在する場合はクラス内のすべてを取得/設定できるため、特定の要素のみに必要な場合は、「ホワイトリスト」をフィルターとして使用できます。
例:
private $callWhiteList = array(
"foo" => "foo",
"fee" => "fee",
// ...
);
public function __call($_name, $_arguments){
$action = substr($_name, 0, 4);
$varName = $this->callWhiteList[substr($_name, 4)];
if (!is_null($varName) && isset($this->{$varName})){
if ($action === "get_") return $this->{$varName};
if ($action === "set_") $this->{$varName} = $_arguments[0];
}
}
現在は、「foo」と「fee」のみを取得/設定できます。
その「ホワイトリスト」を使用して、varにアクセスするためのカスタム名を割り当てることもできます。
例えば、
private $callWhiteList = array(
"myfoo" => "foo",
"zim" => "bom",
// ...
);
このリストを使用して、次のように入力できます。
class MyClass{
private foo = "bar";
private bom = "bim";
// ...
// private $callWhiteList = array( ... )
// public function __call(){ ... }
// ...
}
$C = new MyClass();
// as getter
$C->get_myfoo(); // return "bar"
$C->get_zim(); // return "bim"
// as setter
$C->set_myfoo("abc"); // set "abc" as new value of foo
$C->set_zim("zam"); // set "zam" as new value of bom
。
。
。
それで全部です。
Doc:
__call()は、オブジェクトコンテキストでアクセスできないメソッドを呼び出すとトリガーされます。