webew
Войти » Регистрация
 
PHP

enum в php

23 ноября 2011, 0:38
Автор: deadka
В недрах сети имеется большое количество различных реализаций enum, даже где-то встречал упоминание, что они прям готовые есть в 5.3. Но не нашёл пруфлинк.

Коллеги, просвятите плиз, какую реализации enum Вы используете в своих повседневных задачах?
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

1234ru

Если честно, не пользовался (всегда хватало средств работы с массивами, которые в PHP весьма гибкие).
Было бы интересно посмотреть на пример, когда это понадобилось.

С наскока нашел в документации вот что:
http://www.php.net/manual/en/class.splenum.php
То, что не убивает нас, делает нас инвалидами.
23.11.2011, 09:02
Ответить

deadka

Спасибо за ссылку, опробую. Что касается примера - хочу завести такое проперти в классе, которое может принимать одно из трёх определенных значений. Можно конечно проверять на уровне __set, но разве не лучше, когда в-принципе нет возможности ввести некорректное значение?
Enum'ы в традиционном понимании эту задачу вполне себе решают.
Через more, через less мы бредем в страну чудес...
23.11.2011, 12:02
Ответить

1234ru

Я бы установку этого свойства реализовал через специальный метод (который проверял бы на допустимые значения).
По крайней мере, так будет привычнее с точки зрения традиционного программирования на PHP (например, я бы удивился, если бы в скрипте у меня было написано $this->something = 3;, а потом оказывалось бы, что там какое-то другое значение).
То, что не убивает нас, делает нас инвалидами.
24.11.2011, 09:53
Ответить

deadka

В данном случае мне нужно иметь в объекте класса TreeNode два элемента - id сущности (либо question либо qa) и node_id - целое положительное число. Что-то такое имелось в виду? Если можно как-то улучшить - прошу указать как.

<?php

class TreeNode {
    const entity_question = 1;
    const entity_qa = 2;

    private $data;
   
    private function __set( $name, $value ) {
        if ( "node_id" == $name ) {
            if ( ( gettype($value) != integer )  || ( $value <=0 ) )
                trigger_error('Incorrect value "' . $value . '" (type: ' . gettype($value) . ') for name "' . $name . '" (method "' . __METHOD__ . '").', E_USER_ERROR);
        } else if ( "entity" == $name ) {
            if ( gettype($value) != integer  || ( $value !== TreeNode::entity_question && $value !== TreeNode::entity_qa) )
                trigger_error('Incorrect value "' . $value . '" (type: ' . gettype($value) . ') for name "' . $name . '" (method "' . __METHOD__ . '").', E_USER_ERROR);
        } else {
            trigger_error('Incorrect name "' . $name . '" (method "' . __METHOD__ . '")', E_USER_ERROR);            
        }
        $this->data[$name] = $value;
    }

    private function __get($name) {
        if ( !isset($this->data[$name]) )
            trigger_error('Incorrect name "' . $name . '" (method ' . __METHOD__ . ').', E_USER_ERROR);
        return $this->data[$name];
    }
};

  $tn = new TreeNode;
  $tn->node_id = 1;
  $tn->entity = TreeNode::entity_question;
  $val = $tn->node_id;  
?>
Через more, через less мы бредем в страну чудес...
24.11.2011, 22:57
Ответить
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: