日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效

發布時間:2024/7/23 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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获取函数的代码片段,唯有反射最高效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。