亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP - 在每個方法調用時調用函數

PHP - 在每個方法調用時調用函數

PHP
慕碼人2483693 2023-07-21 18:27:39
我有幾個帶有多種方法的課程。我想用每個方法調用執行一個函數,而不是在每個方法中進行相應的調用。有沒有辦法自動執行此操作?像方法偵聽器之類的東西?
查看完整描述

1 回答

?
慕姐4208626

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


查看完整回答
反對 回復 2023-07-21
  • 1 回答
  • 0 關注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號