在类中定义属性时使用OR运算符

时间:2011-04-19 16:12:48

标签: php class php-5.3

我正在制作一个抽象类来缓和属性的处理 现在我想使用二进制OR(|)运算符为属性设置一些常量选项。

class VarType
{
    // Variable types
    const MIXED         = 0;
    const STRING        = 1;
    const INT           = 2;
    const FLOAT         = 3;
    const BOOL          = 4;
    const ARRAY_VAL     = 5;
    const OBJECT        = 6;
    const DATETIME      = 7;

    // Variable modes
    const READ_ONLY     = 16;
    const NOT_NULL      = 32;
}

class myClass {
    protected $_property = 'A string of text';
    protected $_property__type = VarType::STRING | VarType::READ_ONLY;
}

这会返回以下错误:

  

解析错误:语法错误,意外“|”

如何在不输入内容的情况下执行此操作:

protected $_property__type = 17;

4 个答案:

答案 0 :(得分:4)

您可以在构造函数中初始化成员的值。

是的,它有点混乱。 IMO语言应该允许这里的表达式,因为值是常量,但事实并非如此。 C ++使用constexpr在C ++ 0x中修复了这样的事情,但这对你没有帮助。 :)

答案 1 :(得分:3)

在__construct()中声明受保护的字段,或者如果它是静态类,则在类声明之前使用'define':

define('myClass_property_type', VarType::STRING | VarType::READ_ONLY);

class myClass {
    protected $_property = 'A string of text';
    protected $_property__type = myClass_property_type;
}

但它是“脏”方法,不要将它用于非静态类,并尽量避免在任何类中使用它。

答案 2 :(得分:1)

不可能这样声明。

您可以使用构造函数初始化属性。

答案 3 :(得分:1)

尝试

而不是你正在做的事情

(对于静态成员,它限定在类中,在所有实例之间共享)

class myClass {
    protected static $_property;
    protected static $_property__type;
}

myClass::$_property = 'A string of text';
myClass::$_property__type = VarType::STRING | VarType::READ_ONLY;

(对于普通的非静态成员变量)

class  myClass {
     function __construct()
     { 
         $this->_property = "A string of text";
         $this->_property__type = VarType::STRING | VarType::READ_ONLY;
     }

 ...
 }