這篇文章主要介紹了關於php的可變函數,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
PHP 可變函數
先將我的虛擬碼寫上。
protected $model; public function __construct(Category $category) { $this->model = $category; } public function getLists($request, $isPage = 'get', $order = 'created_at', $sort = 'desc') { return $this->model->orderBy($order, $sort)->$isPage(); }
在 getLists
中,有一個 $isPage
的參數。本意是傳入 get
就是擷取全部資料,paginate
就是分頁。寫完以後覺得哪裡不對。在我們平常的寫法中,尋找全部資料 $this->model->orderBy($order, $sort)->get();
是這樣的,我也未見過使用變數來替換 get()
的。在實際運行中,程式正常執行。隨後在論壇中詢問這種寫法。接下來就要引入一個概念,《可變函數》。
什麼是可變函數?
PHP 支援可變函數的概念。這意味著如果一個變數名後有圓括弧,PHP 將尋找與變數的值同名的函數,並且嘗試執行它。
瞭解了這個概念以後那麼上述程式就可以講的通了。$isPage
在程式運行中,替換為 get
, 而 $isPage
後有一個圓括弧,那麼程式就會尋找同名函數。進而繼續執行。
樣本:
<?phpfunction foo() { echo "In foo()<br />\n";}function bar($arg = '') { echo "In bar(); argument was '$arg'.<br />\n";}$func = 'foo';$func(); // 執行 foo(); 命令列中輸出:In foo()<br />$func = 'bar';$func('test'); // 執行 bar();命令列中輸出:In bar(); argument was 'test'.<br />
可變函數的文法來調用一個對象的方法。
<?phpclass Foo{ function Variable() { $name = 'Bar'; $this->$name(); // This calls the Bar() method } function Bar() { echo "This is Bar"; }}$foo = new Foo();$funcname = "Variable";$foo->$funcname(); // This calls $foo->Variable()// 命令列執行輸出: This is Bar
當調用靜態方法時,函數調用要比靜態屬性優先。Variable 方法和靜態屬性樣本。
<?phpclass Foo{ static $variable = 'static property'; static function Variable() { echo 'Method Variable called'; }}echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.$variable = "Variable";Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!