"PHP" / Говнокод #27634 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
switch ($group) {
        case 'Root':
            break;
        case 'Admin':
            break;
        case 'Accountant':
            break;
        case 'Manager':
            break;
        }

return $group;

Вот так можно проверить что ничего не надо делать

Запостил: zoorg zoorg, (Updated )

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

  • $group может быть экземпляром класса с магическим методом __toString, производящим побочные эффекты.
    Ответить
  • А теперь я вам покажу немного уличной магии:
    <?php
    
    function kukarek($group) {
        switch ($group) {
            case 'Root':
                break;
            case 'Admin':
                break;
            case 'Accountant':
                break;
            case 'Manager':
                break;
            }
    
        return $group;
    }
    
    class Pituh {
        public $count = 0;
        private $name;
        public function __construct($initial) {
            $this->name = $initial;
        }
        public function __toString() {
            ++$this->count;
            return $this->name;
        }
    }
    
    $group = new Pituh('Admin');
    
    kukarek($group);
    
    echo "Меня посчитали $group->count раз(а).\n";


    https://ideone.com/TbzIwf

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

    Именно поэтому «PHP» — рахат-лукум моей души.
    Ответить
    • Менеджера посчитали больше. Он важнее.
      https://ideone.com/LvQsJQ

      Туштринг на каждом кейсе без кэширования? Какой багор )))
      Ответить
          • <?php
            
            class SchrodingersPituh {
                public $count = 0;
                public function __construct() {
                }
                public function __toString() {
                	$this->count ^= 1;
                	return $this->count ? '' : '1';
                }
            }
            
            function kukarek($pituh) {
            	if (!"$pituh") {
            		echo "Ne pituh\n";
            	}
            	if ("$pituh") {
            		echo "Pituh\n";
            	}
            }
            
            kukarek(new SchrodingersPituh());


            https://ideone.com/FsmdvI
            Ответить
      • Угу. «PHP» не знает, с чем будут сравнивать значение, поэтому на каждом кейсе производит преобразование типов индивидуально. Хотя и так ясно, что в ветках «case» будут либо строки, либо числа, либо булины, а сравнение объектов с последними (в смысле с числами и с булинами) можно произвести только через «туштринг», так что результат вызова «туштринг» можно было бы и закэшировать.

        Хорошо хоть, что выражение из заголовка switch() вычисляется один раз.

        Именно поэтому «PHP» — щербет моего сердца.
        Ответить
    • > склонялку слов добавить
      odin raz, odip rba, odiq rbe, odir rbi, odis rbo, odit rbu, odiv rca, odiw rce, odix rci, odiy rco, odiz rcu, odob rda, odoc rde, odod rdi, odof rdo, odog rdu, odoh reb, odoj rec, odok red
      Ответить
  • проверяю отпраку коментов в говнокодах 🙂
    Ответить

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

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8