我正在制作一个抽象类来缓和属性的处理 现在我想使用二进制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;
答案 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;
}
...
}