版本:php8.1
遇到这个问题,一般是,方法的参数定义为 int 类型,但是参数值为 float类型,无法进行隐式转换导致报错。
解决:在调用方法时,确认所传参数的类型和方法的定义的参数类型保持一致
雄关漫道真如铁 而今迈步从头越
版本:php8.1
遇到这个问题,一般是,方法的参数定义为 int 类型,但是参数值为 float类型,无法进行隐式转换导致报错。
解决:在调用方法时,确认所传参数的类型和方法的定义的参数类型保持一致
PHP 8.0: ReflectionParameter::getClass())
在 php8.0中使用此方法会报弃用的错误,需要改成
// php8之前写法
$className = $reflectionParam->getClass();
// php8之后写法
$className = $reflectionParam->getType() && !$reflectionParam->getType()->isBuiltin()
? new ReflectionClass($reflectionParam->getType()->getName())
: null;
当前环境 ubuntu20.04 php7.4.3
用pecl install xhprof
安装完成后修改php.ini 添加扩展和设置日志输出
## 添加扩展
extension=xhprof.so
## 设置输出路径
xhprof.output_dir=/home/asd/xhprof/log
完成后重启php
在入口文件增加代码
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);
注册php在终止执行时的函数
register_shutdown_function(function(){
$data = xhprof_disable(); //返回运行数据
//xhprof_lib 在下载的包里存在这个目录,记得将目录包含到运行的php代码中
include '/usr/share/php/xhprof_lib/utils/xhprof_lib.php';
include '/usr/share/php/xhprof_lib/utils/xhprof_runs.php';
$objXhprofRun = new \XHProfRuns_Default();
$objXhprofRun->save_run($data, "test"); //test 表示文件后缀
});
运行。发现/home/asd/xhprof/log下有日志文件
查看关系图
将/usr/share/php/xhprof_html 设置成可以通过nginx访问,访问index.php文件可以查看图
查看图之前需要安装 sudo apt install graphviz
大多数网上都是这种
function msectime()
{
list($msec, $sec) = explode(' ', microtime());
$msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
return $msectime;
}
但是,PHP `microtime`函数可以支持毫秒
`round(microtime(true)*1000)` 可以输出毫秒时间戳
这里使用的yield 方法
function readTheFile($path) {
$handle = fopen($path, 'r');
while(!feof($handle)) {
yield trim(fgets($handle));
}
fclose($handle);
}
$iterator = readTheFile('shakespeare.txt');
foreach ($iterator as $item) {
echo $item;
}
目前遇到二位数组的排序,会用到array_multisort函数。
比如:
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
// 对volume降序,edition升序
$volumeList = [];
$editionList = [];
foreach ($data as $item) {
$volumeList[] = $item['volume'];
$editionList[] = $item['edition'];
}
array_multisort($volumeList, SORT_DESC, $editionList, SORT_ASC, $data);
print_r($data);
// out
Array
(
[0] => Array
(
[volume] => 98
[edition] => 2
)
[1] => Array
(
[volume] => 86
[edition] => 1
)
[2] => Array
(
[volume] => 86
[edition] => 6
)
[3] => Array
(
[volume] => 85
[edition] => 6
)
[4] => Array
(
[volume] => 67
[edition] => 2
)
[5] => Array
(
[volume] => 67
[edition] => 7
)
)
zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.cli_color = 2
/**
* @OA\Info(
* title="My Test API",
* version="1.0.0"
* )
*/
2. 写注释信息
/**
* @OA\Post(
* path="路径,比如:/test/push",
* tags={"标签"},
* summary="描述信息",
* @OA\RequestBody(
* @OA\MediaType(
* mediaType="application/json 请求格式",
* @OA\Schema(
* required={"id"},
* @OA\Property(
* property="id",
* type="int",
* description="id 参数"
* ),
* @OA\Property(
* property="sess",
* type="string",
* description="session 参数"
* ),
* example={"id": 1, "sess": "wdff"}
* )
* )
* ),
* @OA\Response(
* response=200,
* description="successful",
* @OA\JsonContent(
* type="array|object|string",
* @OA\Items(
* @OA\Property(property="seminarName", type="string", description="主会名"),
* @OA\Property(property="seminarId", type="int", description="主会id"),
* @OA\Property(
* property="items",
* type="object",
* @OA\Property(property="subSeminarId", type="int", description="分会id"),
* @OA\Property(property="subName", type="string", description="分会名")
*
* )
* )
* )
*
* )
* )
*/
3. 生成swagger文件
# 首选需要composer require
composer require zircote/swagger-php
# 命令
vendor/bin/openapi -o openapi.json test/
# -o 输出后的文件
# test/ 目录名,swagger会从此目录scan