【问题标题】:php object attribute with dot in name名称中带有点的 php 对象属性
【发布时间】:2011-03-18 11:03:28
【问题描述】:

我有 mysql 表,其中包含 'operation.date'、'operation.name' 等列。 在使用$mysqli->fetch_object() 将该表数据作为对象获取后,我得到了这个(行的print_r):

stdClass Object
(
[id] => 2
[operation.date] => 2010-12-15
[operation.name] => some_name
)

我如何访问 operation.dateoperation.name 以及所有其他奇怪命名的对象属性?

【问题讨论】:

  • 这是重复的。答案是,它不是一个有效的属性。你应该改变它。但是你可以使用$obj->{'operation.date'}来访问它。
  • 对不起。正在搜索但不是连字符。
  • 没问题。反正也没那么容易找到。

标签: php oop naming-conventions


【解决方案1】:

在您的 SQL 查询中指定别名,例如 SELECT column AS nameWithoutDots ...
或使用$object->{'operation.name'}访问这些属性
或将对象转换为这样的数组:$obj = (array)$obj; echo $obj['operation.name']

【讨论】:

  • +1 告诉 OP 如何治愈病因而不是症状
  • 我知道别名,但是用所有列作为别名来编写长达数英里的查询需要付出太多努力:) 由于您的回答信息量最大,我会接受它;)感谢所有答案。跨度>
【解决方案2】:

用点访问属性的正确方法应该是:

echo $object->{"operation.date"}

【讨论】:

    【解决方案3】:

    要访问这些属性,您需要用大括号括起来:

    echo $object->{"operation.date"} //2010-12-15

    如果您以这种方式设置属性,则会删除违规符号,从而允许您以 echo $object->operationdate //2010-12-15 的身份访问该属性

    【讨论】:

    • +1 但我认为 operation.date 需要用引号括起来。
    • 你需要用引号括起来,比如 echo $object->{'operation.date'}
    【解决方案4】:

    使用“as”功能更改 sql 以返回有效的属性名称

    例如。选择 operation.date 作为日期

    【讨论】:

      【解决方案5】:

      您可以使用 $mysqli->fetch_assoc() 获取 assoc 数组而不是对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        相关资源
        最近更新 更多