栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

PHP变量,方法,类等名称中的有效字符是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP变量,方法,类等名称中的有效字符是什么?

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

$varName// <-- varName needs to satisfy the regex$foo->propertyName // <-- propertyName needs to satisfy the regexclass ClassName {} // <-- ClassName needs to satisfy the regex        //     and can't be a reserved keyword

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

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

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

变数

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

${''} = 'foo';echo ${''};      // foo${""} = 'bar';echo ${""};    // bar

常数

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

define('', 'foo');echo constant('');   // foodefine("", 'bar');echo constant(""); // bar

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

物产

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

$obj = new stdClass;$obj->{''} = 'foo';   // Fatal error: Cannot access empty property$obj->{""} = 'foo'; // Fatal error: Cannot access property started with ''$obj->{'*'} = 'foo';echo $obj->{'*'};     // foo

方法

方法名称是任意的,可以用

__call
魔术来处理:

class Test {    public function __call($method, $args) {        echo "Called method "$method"";    }}$obj = new Test;$obj->{''}();    // Called method ""$obj->{""}();  // Called method ""

班级

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

class Test {}class_alias('Test', '');$className = '';$obj = new $className; // Fatal error: Class '' not foundclass_alias('Test', "");$className = "";$obj = new $className; // Works!

功能

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

var_dump(create_function('',''));// string(9) "lambda_1"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568683.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号