数据

优质
小牛编辑
127浏览
2023-12-01

数据包括常量、字符串、整数值、浮点数值、变量和引用。

常量

魔方加密的 PHP 规范支持如下常量:

  • NULL
  • TRUE
  • FALSE
  • __DIR__
  • __FILE__
  • __FUNCTION__
  • __LINE__

注意:__LINE__ 是未加密的文件中对应行号。

字符串

字符串支持使用单引号 ' 包括的简单字符串和使用双引号 " 包括的复杂字符串。

简单字符串

简单字符串仅转义 \\\'

如下列的代码:

<?php
    echo '\r\\\'';

这段代码将会输出 \ r \ ' 四个字符。

复杂字符串

复杂字符串将会对如下字符进行转义:

  • \"
  • \\
  • \a
  • \f
  • \n
  • \r
  • \t

复杂字符串支持使用八进制和十六进制直接表示 ASCII 值,使用八进制表示时值不能超过 0xFF,否则会导致语法错误。定义如下:

"\\"[0-7]{1,3}
"\\x"[0-9a-fA-F]{1,2}

复杂字符串支持直接引入变量,定义如下:

"$"[a-zA-Z_][a-zA-Z0-9_]*
"{$"[a-zA-Z_][a-zA-Z0-9_]*"}"

复杂字符串支持直接引入数组变量,定义如下:

"$"[a-zA-Z_][a-zA-Z0-9_]*"["[a-zA-Z0-9_]+"]"
"$"[a-zA-Z_][a-zA-Z0-9_]*"[$"[a-zA-Z0-9_]+"]"
"{$"[a-zA-Z_][a-zA-Z0-9_]*("["(("$"[a-zA-Z_][a-zA-Z0-9_]*)|([a-zA-Z0-9_]+)|("'"[a-zA-Z0-9_]+"'"))"]")+"}"

具体的例子如下:

"str$var[a]"
"str$var[$a]"
"str{$var[a]}"
"str{$var['a']}"
"str{$var[$a]}"
"str{$var[$a]['a'}"
"str{$var[a][$a]}"
...

引入数组项时,如果不使用 "{" "}" 将变量包括起来,将只支持一维数组,如下列代码:

<?php
    $var = array ('a' => array ('b' => 1));
    echo "str$var[a][b]";

将会输出 strArray[b]。使用 "{" 和 "}" 包括将不受此限制。

请注意,编译时魔方加密的词法分析器会将如代码 "a{$var}b" 切割为 "a" . $var . "b" 五部分,在某些只允许使用字面常量的地方(如函数可选参数默认值)引用变量将会导致语法错误。

如果需要获得字符串中某一个字节的值,请使用 substr() 函数,切勿使用类似 $string [0] 数组方式进行操作,否则代码在运行时会出现错误。

整数值

整数值支持如下定义方式:

"-"?"0"
"-"?"0b"[01]+
"-"?"0"[0-7]+
"-"?[1-9][0-9]*
"-"?"0x"[0-9a-fA-F]+

从上至下分别为:

  • 0
  • 二进制表示
  • 八进制表示
  • 十进制表示
  • 十六进制表示

请注意,符号 - 在不同的上下文可能会被识别为单独的减号或作为带符号整数的一部分。

浮点数值

浮点数值支持如下定义方式:

"-"?([0-9]+)([eE][\+\-]?[0-9]+)?
"-"?([0-9]+"."[0-9]*)([eE][\+\-]?[0-9]+)?
"-"?([0-9]*"."[0-9]+)([eE][\+\-]?[0-9]+)?

变量

变量支持如下定义方式:

"$"[a-zA-Z_][a-zA-Z0-9_]*

魔方加密不支持如 $$variable ${$variable} 之类的可变变量。

由于魔方加密对变量的处理会去除变量名等信息,extract() 等相关函数会失效,请勿使用。

引用

魔方加密仅支持简单的变量引用:

$variable_dest = & $variable_src;

注意,绑定的原变量和目标变量不能是数组项、类属性等,不支持函数参数引用,不支持函数返回引用。