1 回答

TA貢獻1852條經驗 獲得超7個贊
您可以聲明所有方法并像這樣private使用魔術方法。__call
<?php
class MyClass
{
private function doSomething($param1, $param2){ //your previously public method
echo "do ".$param1." ".$param2;
}
private function doSomethingForbidden($param1, $param2){ //your previously public method
echo "doSomethingForbidden";
}
private function verifyPermission($methodName){
return in_array($methodName, [
"doSomething"
]);
}
public function __call($name, $arguments)
{
if($this->verifyPermission($name)){
return call_user_func_array(array($this, $name), $arguments);
}else{
throw new \Exception("You can't do that !");
}
}
}
$nc = new MyClass();
$nc->doSomething("pet", "the dog");
//do pet the dog
$nc->doSomethingForbidden("feed", "the birds");
//Fatal error: Uncaught Exception: You can't do that !
當方法是私有的或不存在時,PHP 將自動將調用路由到__call存在的方法。call_user_func_array從那里,您可以做您想做的事情(檢查權限、記錄內容等),并且由于您現在位于類的“內部”,因此您可以使用原始參數自行調用私有方法。
您可以閱讀魔法方法的文檔來了解更多信息https://www.php.net/manual/en/language.oop5.overloading.php#object.call
- 1 回答
- 0 關注
- 133 瀏覽
添加回答
舉報