【问题标题】:Accessing PHP object properties when property name has non allowed chars当属性名称包含不允许的字符时访问 PHP 对象属性
【发布时间】:2012-01-01 11:17:29
【问题描述】:

我需要访问我指定为变量的 php 对象属性。

$phpObj->$property

这个 $property 可能包含像破折号(-),引号,百分比,甚至空格等字符。 PHP 不允许将这些字符用作变量名,导致我无法访问这些属性。

什么是处理这个问题的好方法?我愿意先将 $property 编码为字母数字,然后将其用作属性变量,但这种编码对于特定字符串应该是唯一的。

例如,我想确保 $phpObj->First-Prop 和 $phpObj->first-prop 的标识应该不同。

【问题讨论】:

标签: php oop


【解决方案1】:
$propertyName = 'property-name';

$phpObj->{$propertyName} = ...
$phpObj->{"property-name"} = ...

只有这可能是问题:

$phpObj->First-Prop and $phpObj->first-prop 

php 中的变量/函数/方法/属性定义不区分大小写...

【讨论】:

  • 谢谢,但这种不区分大小写对我来说可能是个问题。我可能不得不重新考虑我的方法
  • 在尝试获取attributeNodeattributeNode 部分的nodeValue 时遇到了phpcs Object property "nodeValue" is not in valid snake_case 的问题。此解决方法有助于解决问题。
【解决方案2】:

不确定您希望在这里实现什么,但是。 但 你最好暗示一个可用字符的白名单,a-zA-Z0-9 我猜可能_。那么你可以在知道所有字母都在 php 中允许的情况下分配属性。

我不明白为什么属性需要唯一的属性名称,当然具有唯一值的键属性可以实现类似的事情,可以附加到所有内容。

php 不区分大小写,因此 $phpObj->First-Prop 和 $phpObj->First-Prop 将采用最后一个属性。

我希望对您有所帮助,如果您有更多关于实施的信息,更重要的是您想要实现的目标,我会尽我所能提供帮助

【讨论】:

  • 如果您需要添加区分大小写的功能,您可以将它们存储在包含数组的属性中。 php 中的数组区分大小写。 :)
  • 谢谢。这些属性实际上是一组用户为该 php 对象创建的标签。除非已经存在具有完全相同名称(区分大小写)的标签,否则用户可以为对象创建尽可能多的标签。我还需要为每个特定于该对象的标签存储一个整数值。要访问这个整数值,我需要访问该属性。这种方法是尝试实现一个 Solr 响应解析器,我昨天问了一个问题 stackoverflow.com/questions/8132764/…
  • 好的。你可以有 FphpObj->properties['filed'] =0 和 $phpObj->properties['fiELD'] =1;等希望这可能有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多