Используя __ звонят со статическими классами?

Нет, нет способа переопределить оператор присваивания в python, поэтому вы не можете сделать loaded = 5

(вы можете переопределить другие вещи, чтобы он мог работать)

    [118 ] переопределить __call__, чтобы разрешить loaded(5)
  • переопределить __lshift__, разрешить loaded << 5
  • переопределить __ior__, чтобы разрешить loaded |= 5

( однако будьте предупреждены ваши коллеги, или будущие коллеги могут никогда не простить вас)

также, вещи, которые происходят в пределах блока with XXXX as Y:, (обычно) не доступны для метода, который дает контекст, если только эта область ранее не была доступна для места, дающего область (то есть глобальное пространство имен и т.д.)

7
задан hakre 16 November 2012 в 10:10
поделиться

3 ответа

Еще нет, существует предложенный (теперь доступен) __callStaticМетод документов в конвейере длится, я знал. Иначе __call и другой __ волшебные методы не доступны для использования ничем кроме экземпляра объекта.

15
ответ дан 6 December 2019 в 07:52
поделиться

Необходимо использовать другой волшебный метод, __callStatic - это только доступно в PHP> = 5.3, который еще не был на самом деле выпущен.

8
ответ дан 6 December 2019 в 07:52
поделиться

Как описано прежде, нет никакой волшебной статической вызывающей стороны. Но можно кодировать как это:

   class First {
        public static function test1(){
            return 1;
        }
        public static function test2(){
            return 2;
        }
    }


    class Second {
        public static function test1(){
            if(func_num_args()>0){
                return func_get_args();
            }
            return 21;
        }
        public static function test2(){
            return 22;
        }
    }

    class StaticFactory {
        public static function factory($class, $method){
            if(func_num_args()>2){
                $args = func_get_args();
                array_shift($args);
                array_shift($args);
                return call_user_func_array(array($class,$method), $args);
            }else{
            return call_user_func_array(array($class,$method), array());
            }
        }
    }

    print_r(StaticFactory::factory("Second", "test1", 1, false, true));

    print_r(StaticFactory::factory("First", "test1"));
0
ответ дан 6 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: