PHP中如何检查字符串是否可以用作变量名?

2023-12-19

在 PHP 中可以使用可变变量...

例如...

class obj { }
$fieldName = "Surname";
$object = new obj();
$object->Name = "John";
$object->$fieldName = "Doe";
echo "{$object->Name} {$object->Surname}"; // This echoes "John Doe".

但是,$fieldName 字符串可能包含一些变量名称中不允许的字符。 PHP 仍将创建具有该名称的字段(很像关联数组),但我将无法使用 $object->...... 访问它,因为它无法正确解析。

现在,是否有任何函数可以检查该字符串是否可以用作有效的 PHP 变量名。如果没有,如何使用正则表达式创建它? PHP 中变量命名的规则是什么?


From 手册 http://www.php.net/manual/en/language.variables.basics.php:

变量名称遵循与 PHP 中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母、数字或下划线。作为正则表达式,它可以表示为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

因此,如果您通过正则表达式运行字符串,您应该能够判断它是否有效。

应该注意的是,使用变量访问“无效”对象属性名称的能力是某些 XML 解析的正确方法。

例如,从SimpleXML docs:

访问 XML 文档中包含 PHP 命名约定不允许的字符(例如连字符)的元素可以通过将元素名称封装在大括号和撇号内来完成。

接下来是这个代码示例:

echo $xml->movie->{'great-lines'}->line;

所以也不一定wrong拥有只能通过这种方式访问​​的属性。

但是,如果您的代码既创建又使用该对象 - 人们会想知道为什么要使用这些类型的属性。当然,允许类似的情况SimpleXML例如,创建一个对象来表示您控制范围之外的事物。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP中如何检查字符串是否可以用作变量名? 的相关文章

随机推荐

  • 最简单的反向代理[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一种方法来简单地在本地设置连接到远程站点的代理 我不想在系统中正确安装任何东西 如果我可以使用单个命令行调用来调用它 而不是使用单个配置文件
  • 选择一个数据框中与另一数据框中部分匹配的行

    我希望在一个数据框中选择行 data 1 部分匹配第二个数据帧中的行 keep these 得到desired result 我在这里发现了几个基于一列匹配的问题 但我想在三列上匹配 STATE COUNTY and CITY 到目前为止
  • 在 Eclipse-Java EE 上,如何更改树视图上选定元素的颜色设置?

    我最近在 Eclipse Java EE Luna 上切换到深色主题 甚至尝试了其他深色主题 例如月出 但我总是最终不得不调整一些设置以便能够阅读内容 顺便说一下 我必须每次重新启动 Eclipse 时都会重新设置 我希望他们尽快解决该问题
  • 访问剪贴板的第 N 项

    有没有办法从剪贴板中检索多个项目 我正在使用这样的东西 Dim clipboard As MSForms DataObject Dim str1 As String Dim str2 As String Set clipboard New
  • MPI中如何知道进程正在哪个核心上运行?

    我目前正在开发一个项目 我需要知道 MPI 中当前运行进程的处理器的 coreid MPI中有一个函数叫做MPI Get processor name char name int resultlen 这仅给出进程正在运行的节点的名称 我想知
  • 如何清除v2谷歌地图中的所有标记?

    我需要清除 v2 谷歌地图中的所有标记 再次需要添加一些标记 如果有人知道答案 请分享您的想法 您可以使用googleMap clear https developer android com reference com google an
  • 如何在unix中仅替换>和<之间的一个换行符

    假设我有一条文字 this n is gt n lt 我想用 none 替换换行符 这将导致 this n is gt lt 如何实现这一目标 我尝试使用以下内容 echo this n is gt n lt sed e s gt n g
  • 选项卡栏图标选定的图像

    如何自定义标签栏上选定的图像 图标 这可能吗 请指教 谢谢 无需添加任何子视图即可实现 在定义选项卡栏的类中设置 tabBarItem 至 gt gt UITabBarItem tabBarItem1 self tabBar tabBar
  • 与逻辑语句匹配的 Rcpp 矩阵的子集

    在 R 中 如果我们有一个数据矩阵 比如一个 100 x 10 矩阵 X 以及一个具有可能值 0 1 2 3 的 100 元素向量 t 我们可以使用简单的方法轻松找到 X 的子矩阵 y句法 y X t 1 但是 问题是 我如何使用 Rcpp
  • “d3.translateExtent”坐标如何工作?

    jsfiddle演示 https jsfiddle net sarathsaleem 76t03kbu 我正在尝试向圆圈添加拖动并尝试应用translateExtent 那么如何将拖动边界限制在矩形范围内呢 var height 500 v
  • Python3 globals() 和 locals() 内容

    在我的Python3学习中 在尝试globals 和locals 时 我做了一个非常基本的 独立的Python程序并收到了结果为此我请求专家解释 然后 我在我的 Python 程序 任何 中执行了相同的 2 个函数 并在我的程序中收到了许多
  • 在 T-SQL 中将分钟格式化为小时,将分钟格式化为十进制数

    有没有一种干净而简单的方法将整数格式化为小时和分钟的十进制表示形式 非常遗憾的是 T SQL 中没有 Timespan 这样的东西来支持这一点 需要明确的是 如果我有 70 分钟 我想将其转换为 1 小时 10 分钟 即1 10 我还想将其
  • 为什么编译器不能在不使用 const 注释的情况下检测到函数是常量?

    在铁锈中 const函数中可以放入的代码非常有限 例如for不允许循环 也不允许任何非循环const函数调用 我知道堆分配存在问题const函数 但为什么下面的代码无效 fn add a u8 b u8 gt u8 a b const A
  • Angular 服务 - GET 返回未定义

    我正在尝试使用角度服务从数据库中获取用户 在服务中执行 GET 请求时 我可以console log res 并得到回应 但是 当我尝试从另一个组件获取数据时 它总是出现undefined 请帮忙 用户 service ts import
  • 将工作表链接到主工作表并在主工作表不存在时保留值? Excel 2010

    我有很多工作表 目前 每三个月我必须一张一张地浏览这些工作表 以更新几个单元格中的信息 如果我可以创建一个包含这几个更新的单元格的主源文件 我的所有工作表都链接到该文件 那就太好了 这样我就可以更新这个文件 然后我的所有文件都会更新 我唯一
  • Angular 6 中 ng add 与 npm install 之间的区别

    随着 Angular6 的发布 他们添加了一个新命令ng add https github com angular material2 blob master src lib schematics collection json 谁能告诉我
  • jquery ajax 和完整服务器路径

    当使用 jquery 通过 ajax 提交表单时 有没有办法使用完整的服务器路径而不是 url 下面的示例不起作用 但它会让您了解我正在尝试做什么 我知道你不能执行跨域 ajax 请求 但这都在同一台物理服务器上 我不想设置代理或任何太花哨
  • Go gin 获取请求体 json

    我使用邮递员发布数据并在正文中放置一些简单的 json 请求正文 order 1 Name ts1 我需要将数据传输到 json 我尝试如下 我无法获取 json 不知道缺少什么 router POST user func c gin Co
  • CSS 动画 - 为一个又一个元素设置动画

    我想要为一个元素设置动画 然后再为另一个元素设置动画 这可以用 CSS 实现吗 我似乎无法让它工作here http jsbin com licapepose 1 edit html css output到目前为止我的尝试 我有两个主要问题
  • PHP中如何检查字符串是否可以用作变量名?

    在 PHP 中可以使用可变变量 例如 class obj fieldName Surname object new obj object gt Name John object gt fieldName Doe echo object gt