想,我有课,我们可以在为类属性赋值时使用常量来代替属性名称。
define('property', 'test');
class myClass
{
public $test;
}
$obj=new myClass;
我可以使用这样,
$obj->property="value";
有什么办法来实现这一目标?
想,我有课,我们可以在为类属性赋值时使用常量来代替属性名称。
define('property', 'test');
class myClass
{
public $test;
}
$obj=new myClass;
我可以使用这样,
$obj->property="value";
有什么办法来实现这一目标?
是:
$obj->{property}="value";
这将工作,我想:/但为什么哦为什么你想,常量有一个原因,他们有全球范围,所以你为什么需要? – RobertPitt 2010-07-15 13:40:52
喜欢回答的方式。到点。 – 2010-07-15 13:43:13
@RobertPitt我可以想到几种情况。假设你有一个具有两个属性'$ name'和'$ nameutf8'的类。哪一个填充取决于内容是否以UTF-8编码。根据脚本处理哪些数据,您可以更改常量,例如,首先您不支持UTF-8,并希望使迁移更容易。 – Artefacto 2010-07-15 13:56:30
是的,你可以通过@Artefacto建议,但请务必使用常量,当你确信属性值不会改变!
要做到这一点,最好的方法是创建一个stdClass的像类如:
MyClass
{
public function __set($key,$value)
{
$this->{$key} = $value;
}
}
的,为什么你要设置'constants`到你可以使用
$Storage = new MyClass;
$Storage->SomeNewVar = "Some New Val";
echo $Storage->SomeNewVar;
这根本不回答问题。 – Artefacto 2010-07-15 13:59:44
是的我有点误解了他所要求的,而且它已经被你自己回答了。 – RobertPitt 2010-07-15 14:07:25
啊'变量'要么只做一种方法,要么请让你的常数键全部大写。 – RobertPitt 2010-07-15 13:37:22
我会理解,如果使用'$ obj - > $ variable',但是'$ obj - > {constant}'真的很奇怪。 – NikiC 2010-07-15 13:43:21
@nikic我其实觉得这个用法不那么冒犯。除非在受控环境中,否则您很少想要更改任意属性,只要您确定'$ variable'只能使用少量值即可。在我的回答中看到我对罗伯特的回应。 – Artefacto 2010-07-15 14:03:11