2010-07-15 43 views
3

想,我有课,我们可以在为类属性赋值时使用常量来代替属性名称。

define('property', 'test'); 

class myClass 
{ 
public $test; 
} 

$obj=new myClass; 

我可以使用这样,

$obj->property="value"; 

有什么办法来实现这一目标?

+1

啊'变量'要么只做一种方法,要么请让你的常数键全部大写。 – RobertPitt 2010-07-15 13:37:22

+0

我会理解,如果使用'$ obj - > $ variable',但是'$ obj - > {constant}'真的很奇怪。 – NikiC 2010-07-15 13:43:21

+0

@nikic我其实觉得这个用法不那么冒犯。除非在受控环境中,否则您很少想要更改任意属性,只要您确定'$ variable'只能使用少量值即可。在我的回答中看到我对罗伯特的回应。 – Artefacto 2010-07-15 14:03:11

回答

3

是:

$obj->{property}="value"; 
+0

这将工作,我想:/但为什么哦为什么你想,常量有一个原因,他们有全球范围,所以你为什么需要? – RobertPitt 2010-07-15 13:40:52

+1

喜欢回答的方式。到点。 – 2010-07-15 13:43:13

+0

@RobertPitt我可以想到几种情况。假设你有一个具有两个属性'$ name'和'$ nameutf8'的类。哪一个填充取决于内容是否以UTF-8编码。根据脚本处理哪些数据,您可以更改常量,例如,首先您不支持UTF-8,并希望使迁移更容易。 – Artefacto 2010-07-15 13:56:30

0

是的,你可以通过@Artefacto建议,但请务必使用常量,当你确信属性值不会改变!

1

要做到这一点,最好的方法是创建一个stdClass的像类如:

MyClass 
{ 
    public function __set($key,$value) 
    { 
     $this->{$key} = $value; 
    } 
} 

的,为什么你要设置'constants`到你可以使用

$Storage = new MyClass; 

$Storage->SomeNewVar = "Some New Val"; 

echo $Storage->SomeNewVar; 
+0

这根本不回答问题。 – Artefacto 2010-07-15 13:59:44

+0

是的我有点误解了他所要求的,而且它已经被你自己回答了。 – RobertPitt 2010-07-15 14:07:25