gpt4 book ai didi

php - kint 如何解析以符号(加号/减号、波浪号、感叹号、at)为前缀的 PHP 函数?

转载 作者:行者123 更新时间:2023-12-04 16:08:14 24 4
gpt4 key购买 nike

PHP调试工具kint有一个奇怪的语法,其中某些符号可以作为函数的前缀来改变它们的行为,如 this guide 所示。 .

相关资料:

Modifiers are a way to change Kint output without having to use a different function. Simply prefix your call to kint with a modifier to apply it:

! Expand all data in this dump automatically  
+ Disable the depth limit in this dump
- Attempt to clear any buffered output before this dump
@ Return the output of this dump instead of echoing it
~ Use the text renderer for this dump

Example:

+Kint::dump($data); // Disabled depth limit
!d($data); // Expanded automatically

这是如何工作的?

通过查看源代码,这些符号似乎被解析为一个名为 $modifiers 的数组。但是如何用 PHP 做到这一点呢?这的范围是什么,我是否也可以使用其他 unicode 符号来执行此操作,或者只有五个有问题的符号(+、-、~、!、@)。

'@' 已经在 PHP 中使用了前缀,参见:What is the use of the @ symbol in PHP? .这怎么能被否决?


编辑:给定答案的后续问题是 kint 究竟如何改变 (php) 规则。例如,为什么 ~ 没有给出语法错误。考虑这个例子:

<?php
function d($args) {
echo $args[0];
}
d([1,2,3]); // prints 1
~d([1,2,3]); // syntax error, unsupported operand types

对比

<?php
require 'kint.php';
~d([1,2,3]); // prints the array with the text renderer with no issues

编辑 2:删除了 kint 使用 eval() 的未经证实的声明

最佳答案

这里是 Kint 的原作者。

很抱歉让您感到困惑!添加操作数作为简写,以切换常见用例场景的一些常用设置。

由于 Kint 已经解析了调用它的 PHP 代码以获取并显示传递变量的名称(或表达式),因此添加操作数只是对该功能的一个小补充.

variable name displayed

注意显示的是变量名^。截至撰写本文时,Kint 仍然是唯一可以做到这一点的转储程序!


OP 问题的实际解释 来自 this in-depth answer :

PHP 一元运算符:

因此,完全允许在函数调用前加上这些运算符,只要函数返回运算符通常可以处理的值类型:

function foo() {
return 0;
}

// All of these work just fine, and generate no errors:
-foo();
+foo();
!foo();
~foo();

关于php - kint 如何解析以符号(加号/减号、波浪号、感叹号、at)为前缀的 PHP 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47715325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com