博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php中的变量名称用什么表示,PHP变量,方法,类等名称中的有效字符是什么?
阅读量:1540 次
发布时间:2019-04-21

本文共 1383 字,大约阅读时间需要 4 分钟。

小编典典

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*仅当在某些特殊语法元素中直接使用名称时,才使用正则表达式。一些例子:

$varName //

$foo->propertyName //

class ClassName {} //

// and can't be a reserved keyword

但是正则表达式 仅 限制名称的这些“直接”使用。通过PHP的各种动态功能,可以使用几乎任意名称。

通常,您 不应假设

PHP中可以包含哪些字符名称。在大多数情况下,它们只是任意字符串。在PHP中执行诸如“验证某物是否为有效的类名”之类的事情是毫无意义的。

在下面的内容中,我将提供有关如何为不同类别创建怪异名称的示例。

变数

变量名可以是任意字符串:

${''} = 'foo';

echo ${''}; // foo

${"\0"} = 'bar';

echo ${"\0"}; // bar

常数

全局常量也可以是任意字符串:

define('', 'foo');

echo constant(''); // foo

define("\0", 'bar');

echo constant("\0"); // bar

无法动态定义我知道的类常量,因此它们不能是任意的。创建怪异的类常量的唯一方法似乎是通过扩展代码。

物产

属性不能为空字符串,也不能以NUL字节开头,但除此之外,它们是任意的:

$obj = new stdClass;

$obj->{''} = 'foo'; // Fatal error: Cannot access empty property

$obj->{"\0"} = 'foo'; // Fatal error: Cannot access property started with '\0'

$obj->{'*'} = 'foo';

echo $obj->{'*'}; // foo

方法

方法名称是任意的,可以用__call魔术来处理:

class Test {

public function __call($method, $args) {

echo "Called method \"$method\"";

}

}

$obj = new Test;

$obj->{''}(); // Called method ""

$obj->{"\0"}(); // Called method "\0"

班级

class_alias除了空字符串,可以使用创建任意的类名:

class Test {}

class_alias('Test', '');

$className = '';

$obj = new $className; // Fatal error: Class '' not found

class_alias('Test', "\0");

$className = "\0";

$obj = new $className; // Works!

功能

我不知道从用户区创建任意函数名称的方法,但是在某些情况下,内部代码会产生“怪异”名称:

var_dump(create_function('',''));

// string(9) "\0lambda_1"

2020-05-29

转载地址:http://qnldy.baihongyu.com/

你可能感兴趣的文章
王峰记忆法 解密王峰记忆法之迷
查看>>
传统BI为什么注定会失败?
查看>>
ETL工具大全,你了解多少
查看>>
TRFC/QRFC
查看>>
18、Power Query-SQL筛选
查看>>
46、Power Query-Table.FillDown函数简介
查看>>
CDS – One Concept, Two Flavors
查看>>
SAP Development Tools
查看>>
ABAP算术运算函数
查看>>
用新语法写更简洁的ABAP代码
查看>>
ABAP类的方法
查看>>
SAP用户增强总结-采购订单建立增加客户数据增强示例
查看>>
物料帐结算,库存差异为何在下月初冲回
查看>>
SAP中创建分部机构凭证号码并且按年度编号
查看>>
BUUCTF [极客大挑战 2019] BuyFlag
查看>>
BUUCTF [极客大挑战 2019] Secret File
查看>>
个人博客项目之editormd实现写文章功能
查看>>
设计模式之组合模式(结构型)
查看>>
Oracle ORA-01460报错解决方法
查看>>
smartGit系列之长期使用批处理脚本
查看>>