Использование оператора OR при определении свойства в классе - PullRequest
2 голосов
/ 19 апреля 2011

Я делаю абстрактный класс, чтобы упростить обработку свойств.
Теперь я хочу установить некоторые постоянные опции для свойства, используя двоичный оператор 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 ]

4 голосов
/ 19 апреля 2011

Вы можете инициализировать значение члена в конструкторе.

Да, это немного смешано.ИМО язык должен разрешать выражение здесь, поскольку значения являются константами, но это не так.C ++ исправляет такие вещи в C ++ 0x с помощью constexpr, но это вам здесь не поможет.:)

3 голосов
/ 19 апреля 2011

объявляйте защищенные поля в __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;
}

Но это "грязный" метод, не используйте его длястатический класс и старайтесь избегать его использования для любого класса.

1 голос
/ 19 апреля 2011

Вместо того, что вы делаете, попробуйте

(для статических членов, которые относятся к классу и доступны всем экземплярам)

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

 ...
 }
1 голос
/ 19 апреля 2011

Невозможно объявить это так.

Вы можете использовать свой конструктор для инициализации свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...