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

    +146

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    function testPrint($str){
    
    
    	return $str;        
    
    }
    print testPrint("<br>");

    Недавно видел такую полезную функцию:)

    Запостил: dexif, 07 Ноября 2010

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

    • function testPrint($str){
      return testPrint($str);
      }
      было бы интереснее чутка
      Ответить
      • аналог while(true) { ... }
        Ответить
        • конечно же нет.
          не надо путать рекурсию и бесконечный цикл. вайл тру у вас вылетит по таймауту, а рекурсивный вызов вылетит по таймауту зажрав памяти на каждое вызванное тельце. так то.
          Ответить
          • Он может еще вылететь по break внутри тела цикла.
            Ответить
            • вы видите брейк внутри цикла?
              Ответить
              • Я там вижу "...", т.е. там может быть что угодно, в том числе и брейк.
                Ответить
                • многоточие, в этом случае, работает подобно пятну роршаха.

                  если вы, на сайте говнокод ру, в безконечном цыкле от пхп-гуру мартина подразумеваете брейк, то у меня для вас новость: вы - восторженный оптимист.
                  Ответить
          • мне кажется, переполнение стека произойдет быстрее таймаута. Вроде бы максимальный уровень вложенности в похапе по умолчанию 100
            Ответить
            • function testPrint($str = 0){
              echo '<br />' . $str;
              $str = $str + 1;
              return testPrint($str);
              }
              testPrint(0);

              итого: 25762
              вы ошиблись всего на два порядка.
              Ответить
            • У PHP нет контроля уровня вложенности, стек кончился, отвалился с Segmentation Fault и все.
              Ответить
        • Нет, while(true) {...} работает нормально, а вот function testPrint($str){return testPrint($str);} типичный segmentation fault.
          Ответить
    • скорее всего в функции строка на что-то проверялась, а потом эту проверку убрали, дабы не шерстить в поисках функции по коду
      Ответить
      • Ну ладно когда используется ну 2-3 раза в коде... но весь вывод идёт через эту функцию... НАФИГА интерпретатору давать лишнюю работу? Или автозамену отменили?
        Да что там... файл с этой функцией последний раз изменён был в 2007 году... а все новые скрипты продолжают использовать её...
        Ответить
        • потому как теперь код легко расширяем.
          фильтр вывода - пожалуйста. замена тегов - легко.
          Ответить
          • плюсую, потому что согласен.
            Ответить
            • да, но в таком подходе не достаточно ООП и название текущей функции немного не отражает ее назначение. и вообще тут - место для хука.
              Ответить
    • function testPrint($str){
      	if ( function_exists('testPrint') && $str ) {
      		return $str;
      	} else {
      		return false;
      	}
      }
      print testPrint("<br>");

      --
      а может там была проверка стандартов?
      "<br>" или "<br />"...
      Ответить
      • не понял смысла.
        лучше так:
        if (!function_exists('testPrint')) {
        	function testPrint($str){
        		return $str;
        	}
        }
        Ответить

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