ФорумПрограммированиеPHP для идиотов → ПХП 5.4- наконец бл*...

ПХП 5.4- наконец бл*...

  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 0:52

    Ахтунг!!!

    Теперь множественная наследование ;)))

    Блин, на сколько удобно то…
    
    <?php
    
    /**
     * @author AlexanderC
     */
    
    trait Singleton {
            
            /**
             * method called after parent object
             * instantiation with primary input
             * parameters provided
             */
            protected function onAfterConstruct(){ /* extend it */ }
            
            /**
             * Assure no constructor
             * 
             * @return object
             */
            final private function __construct(){ /* do nothing here, extend onAfterConstruct() instead */ }
            
            /**
             * get class instance
             * 
             * @return object
             */
            final public static function getInstance(){
                    static $self;
                    
                    if(!($self instanceof self)){
                            $self = new self;
                            call_user_func_array([$self, "onAfterConstruct"], func_get_args());
                    }
                    
                    return $self;
            }
    }
    
    // а класс прописываем удобно и просто…
    
    class Any {
           use Singleton;
    }
    


    Теперь любой класс который будет юзать данный треит будет синглетоном… а все параметры которые передаются первый раз в ::getInstance() будут при желании переданны в метод onAfterConstruct()


    А самое классное в том что можно реализовать многое, допустим:
    - Cache politics
    - Event driven programming

    итдитп.

    Блин, i love PHP

    Ксттаи ещё очень понравились следующие фишки:
    [] VS array()
    for($key in []) VS foreach(array() as $k => $v)
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июня 2012 г. 1:11, спустя 18 минут 7 секунд

    во-первых - баян, во-вторых синглтон не нужен
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 1:12, спустя 1 минуту 16 секунд

    ;Д, а это с каких то пор не нужен? вот нужен один инстанце на всё время работы приложения, что сделаешь?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июня 2012 г. 1:16, спустя 3 минуты 59 секунд

    Event driven programming

    что мешает сделать так?

    <?php
    
    class UserRegistrationService
      public function __construct(EventDispatcherInterface $eventDispatcher )
      {
        $this->eventDispatcher = $eventDispatcher;
      }
    
      public function registerUser(Request $request)
      {
        $this->eventDispatcher->dispatch('before.registration');
    
        $user = new User();
        // do validation, persist user
    
        $this->eventDispatcher->dispatch('after.registration', new AfterRegistrationEvent($user));
      }


    зачем для этого трейты? что они сделают лучше?
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 1:20, спустя 3 минуты 40 секунд

    Дык в том то и дело что ничего не мешает- а представь что писанины будет на много меньше если не каждый раз писать код в каждый класс, а создать треит- на много еффективнее и удобнее при поддержке кода и изменениях
    + как же быть с той задачей что предлогал ранее?
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июня 2012 г. 1:21, спустя 1 минуту 44 секунды

    Cache


    используй АОП.

    <?php
    
    /**
     * @Cache(expires="tomorrow")
     */
    class BlogController extends Controller
    {
        /**
         * @Cache(expires="+2 days")
         */
        public function indexAction()
        {
        }
    }
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 13 июня 2012 г. 1:24, спустя 2 минуты 49 секунд

    трейты охуени.
    синглетоны гавно.
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 1:29, спустя 5 минут 6 секунд

    Ну во первых оно возможно(сейчас оно и юзается), но чтение аннотаций требует времени(даже если создавать кэш).

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

    К слову я не сторонник вэй той дизайнерской хрени в апликациях, но некоторые из них(в определённых кругах) реально помогают.

    Да и речь идёт о новый возможностях похапе а ни спор об программерских парадигмах
    Спустя 37 сек.
    ;ДДД все в ту стороны дуют ;ДДД
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 13 июня 2012 г. 1:30, спустя 1 минуту 2 секунды

    а это с каких то пор не нужен? вот нужен один инстанце на всё время работы приложения, что сделаешь?

    буду использовать IoC-контейнер

    Дык в том то и дело что ничего не мешает- а представь что писанины будет на много меньше если не каждый раз писать код в каждый класс, а создать треит- на много еффективнее и удобнее при поддержке кода и изменениях

    не могу понять, каким образом трейты уменьшат кол-во кода в приведенном мной примере. Перепиши его с трейтами, я посмотрю как будет.
    Спустя 39 сек.
    но чтение аннотаций требует времени(даже если создавать кэш).

    кодогенерация решает
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 1:35, спустя 5 минут 16 секунд

    Опять же- можно, а почему не юзать код который в итоге приведёт к использованию одной маленькой строчки для этого?
    Спустя 60 сек.
    AlexanderC
    но чтение аннотаций требует времени(даже если создавать кэш).
    кодогенерация решает


    +1 без неё вообще лажа
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 1:56, спустя 20 минут 51 секунду

    не могу понять, каким образом трейты уменьшат кол-во кода в приведенном мной примере. Перепиши его с трейтами, я посмотрю как будет.


    Ну вот допустим (на скорую руку)…

    
    <?php
    
    /*
     * @author AlexanderC
     */
    
    trait EventDriven {
        
        /**
         * some constants used for
         * event firing 
         */
        const EVENT_DRIVEN_DELIMITER = '.';
        const EVENT_DRIVEN_EVENT_BEFORE = 'before';
        const EVENT_DRIVEN_EVENT_AFTER = 'after';
        
        /**
         * method called after singleton instantiating
         * 
         * @return void 
         */
        final private function onAfterConstruct(){
            $this->fireEvents();
        }
        
        /**
         * register and fire events for this class
         * 
         * @return void 
         */
        final private function fireEvents(){
            $event = $this->__regEventStringInflect(__CLASS__);
            
            EventDispatcher::getInstance()->dispatch(
                    self::EVENT_DRIVEN_EVENT_BEFORE.self::EVENT_DRIVEN_DELIMITER.$event);
            EventDispatcher::getInstance()->dispatch(
                    self::EVENT_DRIVEN_EVENT_AFTER.self::EVENT_DRIVEN_DELIMITER.$event, 
                    $this->getEventObject()
            );
        }
        
        /**
         * build event string
         * 
         * @param string $string
         * @return string
         */
        final private function __regEventStringInflect($string){
            return strtolower(preg_replace('/[A-ZЁ]{1}/u', 
                    self::EVENT_DRIVEN_DELIMITER, (string) $string));
        }
        
        /**
         * method called 
         * 
         * @return \stdClass 
         */
        protected function getEventObject(){
            return new \stdClass;
        }
    }
    
    
    /**
     * this class will fire such events as
     * 
     * before.user.registration
     * after.user.registration [with provided User instance]
     */
    class UserRegistration {
        use EventDriven;
        use Singleton;
        
        /**
         * get an user instance
         * 
         * @return \User
         */
        protected function getEventObject(){
            return new User();
        }
    }
    
    // UserRegistration::getInstance()
    
    
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 июня 2012 г. 11:37, спустя 9 часов 40 минут 42 секунды

    ну все позходу рыба обосрался
    Сапожник без сапог
  • indeego

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz 13 июня 2012 г. 20:25, спустя 8 часов 47 минут 58 секунд

    Оффтоп, это все отлично. Но скажите мне друзья, ведь вся эта хуйня по сути нужна архитектору приложения. Т.е. люди, которые будут что то создавать новое и великое, возможно новый фреймворк. Я всегда хотел спросить, кем вы работаете что пишете такой код и много ли вам платят? Дайте почитать про Event driven programming.
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 15 июня 2012 г. 14:25, спустя 1 день 17 часов 59 минут

    Traits do not add runtime semantics, they only take part in the process of building a class

    Вот по этому Traits полное гавно - просто какая то ненужная хуйня, которая заставляет прыгать в другой файл. Базара нет, макрос на синглтон явно хуже, но тут тоже черезжопная хуета…

    AlexanderC, конечно, мега функция PHP call_user_func_array - призер гран-при нормер один по вворачиванию костылей - всегда выручает в жопоузких ситуациях. Хотя хули тут - результат то важен, хотя многие бородатые дядьки так не считают
  • AlexanderC

    Сообщения: 270 Репутация: N Группа: Кто попало

    Spritz 16 июня 2012 г. 1:12, спустя 10 часов 46 минут 58 секунд

    трейты это можно в пхп считать частью класса который их юзает, потому как если посмотреть внутри трейта можно вызывать приватные методы- и наоборот. + можно указывать какие методы из какого трейта использовать- во избежании коллизий. Трейты это удобно что не говори- я думаю не зря их добавили- люди давно просили.

    А насчёт колл юзер функ аррэй- то как по другому передавать аргументы методы класса/функции в такой форме в которой они были переданы изначальной функции?

    И хули бородатые дядьки не так считают?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!