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