Php 使用常量变量访问对象的属性

Php 使用常量变量访问对象的属性,php,Php,为什么我不能使用常量变量访问对象的属性 这是常数: define('FLD_CASES_STATUS', 'case_status'); 这不起作用 $case->TBL_CASES; 请看以下简单的演示代码: <?php define('FLD_CASES_STATUS', 'case_status'); $obj = new stdClass; $obj->{FLD_CASES_STATUS} = 'foo'; var_dump($obj->{FLD_CASES_

为什么我不能使用常量变量访问对象的属性

这是常数:

define('FLD_CASES_STATUS', 'case_status');
这不起作用

$case->TBL_CASES;

请看以下简单的演示代码:

<?php
define('FLD_CASES_STATUS', 'case_status');
$obj = new stdClass;
$obj->{FLD_CASES_STATUS} = 'foo';
var_dump($obj->{FLD_CASES_STATUS}, $obj->case_status);

$case->{TBL_CASES}
因为
$case->regular\u property\u access
$case->CONSTANT
之间有什么区别?@JonStirlingThanks@deceze问题是我的字段名以后可能会更改,有没有更好的情况?更多。问题:以后可能会更改字段名。解决方案:确保名称在可能更改的代码中只使用一次,因此当它们更改时,很容易只更改一次。目前,您正试图使用常量来实现这一点,所以您只需更改一个常量。Saner会将其抽象到一个类后面,该类的公共接口不会更改,但其内部字段名可以随时更改。问题是我的字段名以后可能会更改,有没有更好的情况?也许将您的名称保存在db或json文件中,并像配置文件一样读取它们?然后你可以使用$object->{$propertyName}来访问OK让我解释更多,假设我的字段名在表中是subject,我想将其更改为title,你的解决方案绝对有效,我在自己的项目中也做了同样的事情,我的问题是最好的解决方案是什么?@wahdan,这非常抽象;)如果我正确理解了您想要做的事情,那么使用define()是不可能的。或常数。您所能做的就是使用数组并使用foreach运行它。但这是否是数据库响应的最佳解决方案?我不会那么做的。
<?php

class MyObject {

  public $myProperty;
}

define('PROPERTY', 'myProperty');

$obj = new MyObject;
$obj->{PROPERTY} = 5;
echo $obj->{PROPERTY}; // returns 5