__Call sihirli yöntemini kullanarak bir deneme yaptım. Eğer diğer cevaplar ve yorumlar "tüm" BÜYÜ YÖNTEMLERİ KULLANMAYIN "uyarıları nedeniyle ben sonrası gerekir emin değilim ama ben burada bırakacaktır .. sadece biri yararlı bulursanız.
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];
}
}
Sadece bu yöntemi sınıfınıza ekleyin, şimdi şunları yazabilirsiniz:
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
Bu şekilde sınıfınızdaki herşeyi varsa alabilir / ayarlayabilirsiniz, böylece yalnızca birkaç belirli öğeye ihtiyacınız varsa, filtre olarak bir "beyaz liste" kullanabilirsiniz.
Misal:
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];
}
}
Şimdi sadece "foo" ve "ücret" alabilirsiniz / ayarlayabilirsiniz.
Bu "beyaz listeyi", değişkenlerinize erişmek üzere özel adlar atamak için de kullanabilirsiniz.
Örneğin,
private $callWhiteList = array(
"myfoo" => "foo",
"zim" => "bom",
// ...
);
Bu listeye şimdi şunları yazabilirsiniz:
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
.
.
.
Bu kadar.
Doc:
__call () , bir nesne bağlamında erişilemez yöntemler çağrıldığında tetiklenir.