php 自动加载变量 class 名称
php autoload variable class name
谁能解释一下这是如何工作的:
${(int)![=12=]=$variable->other['class']}::my_static_method();
在这个 Whosebug 问题的答案中:
它是一个变量变量语句,使用布尔语句结果创建一个全局变量名在第一个${ }
${
- 创建变量变量。
(int)
- 将以下语句的结果转换为整数
!
- 不是语句,反转布尔结果。
[=15=]
- 创建一个变量
[=16=]
- 这通常会导致解析错误,其中需要 T_VARIABLE 而不是 T_LNUMBER
=
- 设置
[=16=]
变量。
$variable->other['class']
- 这是一个对象变量,在别处定义,我不知道它做什么或它包含什么。
}
- 第一个变量变量名结束。
::
- 从布尔语句创建的 class 名称调用静态方法
所以通俗地说,它可以创建以下语句:
::my_static_method();
为什么是数字?因为变量名是由布尔语句创建的,即 true 或 false,它被倒置并转换为整数。
在 PHP true
和 false
中等于 1
和 0
.
所以 </code> 失败,<code>[=16=]
成功。
总的来说,请记住您正在绕过 PHP 语法错误解释器。虽然可变变量的特性旨在创建动态变量名称,但我不认为它们意味着它会像这样被滥用,因此它可能意味着您的代码可能会与更新版本的 PHP 中断。一个例子是 ,其中 PHP 7 的结果是 What? Tom Just Want To Lov€ Tina Arrr!
只是说,使用可变变量语句无论如何都是糟糕的编程习惯。
它的作用与:
[=10=]=$variable->other['class'];//value here lets say is 'myClass'
[=10=]::my_static_method();//here now is myClass::my_static_method(); called
为什么使用(int)!
?
因为他只会耍花招。
print (int)![=13=]=$variable->other['class'];
的结果是 0
。
因为如果这里设置了什么[=15=]=$variable->other['class']
,
print (bool)[=16=]=$variable->other['class'];
将是 true
.
然后它将通过!
取反,所以它变成false
,最后用(int)
0
。
这就是之前设置的变量的名称:[=22=]
。
但是只给全局变量一个数字是非常糟糕的做法。
通常所有变量必须以 _
或 A-Za-z
开头。
不知道为什么把它作为示例删除,也许是为了取笑人们。
根本不要使用这个!
只是为了展示它是如何完成的;)(工作代码)
error_reporting(0);
define(0x7F,' ..the crazy Girl');
define('§','at? ');
define('_',' Wh');
${'$#?!'} = ' Arrr!';
$♂ = Tom;
$♀ = Tina;
$c = get_defined_constants();
print _ . § . $♂ .' '. Just . ' ' . Want . ' ' . To ." ". Lov€ ." ". $♀ . $c[127] . ${'$#?!'};
//result: What? Tom Just Want To Lov€ Tina ..the crazy Girl Arrr!
随时发疯。 :-)
谁能解释一下这是如何工作的:
${(int)![=12=]=$variable->other['class']}::my_static_method();
在这个 Whosebug 问题的答案中:
它是一个变量变量语句,使用布尔语句结果创建一个全局变量名在第一个${ }
${
- 创建变量变量。
(int)
- 将以下语句的结果转换为整数
!
- 不是语句,反转布尔结果。
[=15=]
- 创建一个变量
[=16=]
- 这通常会导致解析错误,其中需要 T_VARIABLE 而不是 T_LNUMBER
- 创建一个变量
=
- 设置
[=16=]
变量。
- 设置
$variable->other['class']
- 这是一个对象变量,在别处定义,我不知道它做什么或它包含什么。
}
- 第一个变量变量名结束。
::
- 从布尔语句创建的 class 名称调用静态方法
所以通俗地说,它可以创建以下语句:
::my_static_method();
为什么是数字?因为变量名是由布尔语句创建的,即 true 或 false,它被倒置并转换为整数。
在 PHP true
和 false
中等于 1
和 0
.
所以 </code> 失败,<code>[=16=]
成功。
总的来说,请记住您正在绕过 PHP 语法错误解释器。虽然可变变量的特性旨在创建动态变量名称,但我不认为它们意味着它会像这样被滥用,因此它可能意味着您的代码可能会与更新版本的 PHP 中断。一个例子是 What? Tom Just Want To Lov€ Tina Arrr!
只是说,使用可变变量语句无论如何都是糟糕的编程习惯。
它的作用与:
[=10=]=$variable->other['class'];//value here lets say is 'myClass'
[=10=]::my_static_method();//here now is myClass::my_static_method(); called
为什么使用(int)!
?
因为他只会耍花招。
print (int)![=13=]=$variable->other['class'];
的结果是 0
。
因为如果这里设置了什么[=15=]=$variable->other['class']
,
print (bool)[=16=]=$variable->other['class'];
将是 true
.
然后它将通过!
取反,所以它变成false
,最后用(int)
0
。
这就是之前设置的变量的名称:[=22=]
。
但是只给全局变量一个数字是非常糟糕的做法。
通常所有变量必须以 _
或 A-Za-z
开头。
不知道为什么把它作为示例删除,也许是为了取笑人们。
根本不要使用这个!
只是为了展示它是如何完成的;)(工作代码)
error_reporting(0);
define(0x7F,' ..the crazy Girl');
define('§','at? ');
define('_',' Wh');
${'$#?!'} = ' Arrr!';
$♂ = Tom;
$♀ = Tina;
$c = get_defined_constants();
print _ . § . $♂ .' '. Just . ' ' . Want . ' ' . To ." ". Lov€ ." ". $♀ . $c[127] . ${'$#?!'};
//result: What? Tom Just Want To Lov€ Tina ..the crazy Girl Arrr!
随时发疯。 :-)