【问题标题】:Can we use constants in place of property name in assigning values to class properties.?在为类属性赋值时,我们可以使用常量代替属性名称吗?
【发布时间】:2010-07-15 13:29:39
【问题描述】:

假设,我有课,

define('property', 'test');

class myClass
{
public $test;
}

$obj=new myClass;

我可以这样用吗,

$obj->property="value";

有什么办法可以做到吗?

【问题讨论】:

  • 是的,您为什么要将constants 设置为variable,要么以一种方式进行,要么仅以另​​一种方式进行,并且请使您的常量键全部大写。
  • 如果有人使用$obj->$variable 我会理解,但$obj->{constant} 真的很奇怪。
  • @nikic 我实际上认为这种用法不那么令人反感。当您确定$variable 只能采用几个值时,您很少希望更改任意属性,除非在受控环境中。在我的回答中查看我对罗伯特的回复。

标签: php properties


【解决方案1】:

是的:

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

【讨论】:

  • 我想这会起作用:/但是为什么哦,为什么要这样做,有常量是有原因的,而且它们具有全局范围,那么为什么需要呢?
  • 喜欢回答的方式。重点。
  • @RobertPitt 我能想到几个案例。假设您有一个具有两个属性$name$nameutf8 的类。填充哪一个取决于内容是否以 UTF-8 编码。根据脚本处理的数据,您可以更改常量,例如,一开始您不支持 UTF-8 并希望使迁移更容易。
  • @Artefacto 我不知道。这个例子有味道。然后,您实际上是将需要此类开关的类的所有属性名称作为常量放入全局范围内。将常量传递给设置器(例如setName('foo', CHARSET);)并处理内部填充的内容不是更好吗?或者简单地将常量传递给构造函数,以便类知道它必须填充 UTF8 道具。实际上,为什么要为此使用常量呢?为什么不使用环境对象呢?
  • @Gordon 好的,让我们想象它是一个您无法控制的外部库:p
【解决方案2】:

最好的方法是创建一个类似 stdClass 的类,例如:

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

你可以使用

$Storage = new MyClass;

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

echo $Storage->SomeNewVar;

【讨论】:

  • 这根本不能回答问题。
  • 是的,我有点误解他的要求,并且已经由你自己回答了。
【解决方案3】:

是的,您可以按照@Artefacto 的建议,但是当您确定属性值不会改变时,请确保使用常量!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多