1. PHP / Говнокод #11916

    +66

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    <?php
    
       //You can even add more Dollar Signs
    
       $Bar = "a";
       $Foo = "Bar";
       $World = "Foo";
       $Hello = "World";
       $a = "Hello";
    
       $a; //Returns Hello
       $$a; //Returns World
       $$$a; //Returns Foo
       $$$$a; //Returns Bar
       $$$$$a; //Returns a
    
       $$$$$$a; //Returns Hello
       $$$$$$$a; //Returns World
    
       //... and so on ...//
    
    ?>

    Из комментов на http://www.php.net/manual/en/language.variables.variable.php

    Запостил: xaionaro, 12 Октября 2012

    Комментарии (24) RSS

    • как оно работает?
      Ответить
      • $ немного похож на eval
        $$a в php это примерно eval(eval("a")) в жабоскрипте, только ограниченный именами переменных.
        Ответить
        • А, понял, а я уж было подумал, что $$ переходит к предыдущей переменной в списке.
          Ответить
          • Да, я подумал, как кулхацкер, а надо было думать, как лиспер. Вот она, идеологическая пропасть!
            Ответить
            • Да я точно так же подумал. Не кулцхакер vs лиспер, а статические языки vs. динамические.
              >$ немного похож на eval
              Теперь понятно откуда пошла народная мудрость:
              "Обилие $ в пхп - это к говну."
              Ответить
      • $a = "Hello"
        $$a = $Hello = "World"
        $$$a = $$Hello = $World = "Foo"
        и т.д.
        Ответить
    • А я думал, в PHP нет указателей.
      Ответить
      • Где здесь указатели, byss?

        Самое обыкновенное обращение к переменной по ее имени.
        Ответить
        • char *Bar = "a";
             char **Foo = Bar;
             char ***World = Foo;
             char ****Hello = World;
             char *****a = Hello;
          
             a; //Returns Hello
             *a; //Returns World
             **a; //Returns Foo
             ***a; //Returns Bar
             ****a; //Returns "a"

          Похоже же.
          Ответить
          • Эх, похапешники. А адрес кто брать будет? Доллары любите, а про амперсанды забыли.
            Ответить
            • Фейспалм на мою похмельную голову, забыл амперсанды. Но я не похапешник, я ObjC-шник :)
              Ответить
          • Похоже, да не тоже ;)

            В php запросто можно сделать $World = "Bar", а здесь для этого придется менять типы у половины переменных. Это скорее вот так:
            map<string, string> globals;
            globals["Bar"] = "a";
            globals["Foo"] = "Bar";
            globals["World"] = "Foo";
            globals["Hello"] = "World";
            globals["a"] = "Hello";
            
            globals["a"]; // returns Hello
            globals[globals["a"]]; // returns World
            ...
            Ответить
    • Это выглядит очень заразным.
      Ответить
    • занимательная механика... йопт.
      Ответить
    • тыкать носом в синтетические примеры, которые на простых примерах демонстрируют возможности - это путь настоящего квалифицированного разработчика.
      Ответить
      • Не-не, я лично только "за" такие примеры. Просто прикольно зациклено: "Hello World Foo Bar a Hello World Foo Bar a Hello World [...]", и показалось достаточно достойным, чтобы поделиться :)
        Ответить
    • что-то такое уже видел) там ещё было что-то про идота со справкой:-)
      Ответить
    • имя переменной получается из значения. В итоге всё зациклено
      Ответить

    Добавить комментарий