2011-04-19 32 views
2

我正在制作一个抽象类来缓解对属性的处理。
现在我想使用二进制OR(|)运算符为某个属性设置一些常量选项。在定义类中的属性时使用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; 
} 

这将返回以下错误:

Parse error: syntax error, unexpected '|'

我怎么能做到这一点,而不必键入:

protected $_property__type = 17; 
+0

的[设置一个变量,以什么json_encode()输出在PHP(可能重复http://stackoverflow.com/questions/5631246/set-a-variable-to-what-json-encode-输出在php) – 2011-04-19 16:21:16

+0

@ Shakti:根本原因和解决方案是一样的,但这绝不是重复的问题。 – 2011-04-19 16:25:41

+0

@Shakti:不,在我的情况下是关于使用常量。在json案例中使用了一种方法。 – ANisus 2011-04-19 16:27:23

回答

4

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

是的,这有点儿成名。国际海事组织的语言应该允许在这里表达,因为这些值是常数,但事实并非如此。 C++在C++ 0x中用constexpr修复了这样的事情,但这对你没有帮助。 :)

1

这是不可能声明它这样。

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

3

在__construct申报保护字段(),或者,如果是静态类,用类声明之前“定义”:

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

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

但它是“脏”的方法,不使用它的非 - 静态类,并尽量避免使用它的任何类。

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; 
    } 

... 
} 
+0

你有语法错误。我认为,静态成员不是成员的松散含义是有点危险...... – 2011-04-19 16:19:18

+0

@Tomalak你是什么意思“隐含静态成员不是成员......”?我不是故意暗示他们不是成员,但也许我误解了你。 – 2011-04-19 16:25:38

+0

您提供了两个示例,一个是“用于静态”,另一个是“用于成员变量”。当然,你已经编辑了你的答案......现在它读得好多了。 :) – 2011-04-19 16:27:06

相关问题