php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效
引言
為了演示上一篇我們所說的PHP中反射的應用,本篇接著講反射的應用。因為其特性,是操作函數和方法的,是函數的操作者,類的操作者,所以顯得格外重要。
我們從一個小需求出發,假如有一段這樣的代碼:
function blah($a, $b) { return $a*$b; }echo getFunctionCode("blah");當然 getFunctionCode函數本身在PHP中是不存在的,這里是偽代碼。有沒有可能,根據函數名,獲取函數的內部代碼呢?
學習時間
這個您真得拿好小本本記好了,非常地重要。這個功能如果是做全局的文檔,可能非常實用。生成的文檔,自動把函數的內部方法寫出來,作為代碼示例,實時修改,實時生效。
我們需要借助 ReflectionFunction 用于獲取函數的基本信息,比如文件名,開始和結束的行數等等,直接上代碼:
$func = new ReflectionFunction('myfunction');$filename = $func->getFileName();$start_line = $func->getStartLine() - 1; $end_line = $func->getEndLine();$length = $end_line - $start_line;上述代碼假設有一個函數 myfunction,我們獲取了 myfunction 所在的文件目錄,并且得到了函數開始和結束的行數。
然后可以使用文件操作,將該段代碼文本提取出來:
$source = file($filename);$body = implode("", array_slice($source, $start_line, $length));print_r($body);file 函數把整個文件讀入到一個數組內,使用 array_slice 切分出 myfunction 所在的行,就是了!
實測
我們使用 Laravel 7 框架內,添加一個助手函數如下:
也就是格式化日期字符串。此函數在 composer 引導加載的時候,會全局有效。
為了測試,在 Commands 內添加臨時指令,為了方便調試,使用 $this->info 輸出信息:
命令行執行后輸出內容如下:
與預想的結果一致。
寫在最后
本文通過PHP提供的ReflectionFunction,將全局定義的函數,可以通過獲取其絕對路徑名,起始和結束行數,將函數的代碼段打印出來。可以說是非常高階而實用了。
Happy coding :-)
我是 @程序員小助手 ,持續分享編程知識,歡迎關注。
總結
以上是生活随笔為你收集整理的php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python用turtle画皮卡丘_用P
- 下一篇: 动态规划算法php,php算法学习之动态