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

    +160.4

    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
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    <?php
     $ok = true;
            $argsbackup = $args;
            for ($i = 0, $j = count($args); $i < $j; $i++) {
                $arg = array_shift($args);
                $type = array_shift($signature);
                switch ($type) {
                    case 'int':
                    case 'i4':
                        if (is_array($arg) || !is_int($arg)) {
                            $ok = false;
                        }
                        break;
                    case 'base64':
                    case 'string':
                        if (!is_string($arg)) {
                            $ok = false;
                        }
                        break;
                    case 'boolean':
                        if ($arg !== false && $arg !== true) {
                            $ok = false;
                        }
                        break;
                    case 'float':
                    case 'double':
                        if (!is_float($arg)) {
                            $ok = false;
                        }
                        break;
                    case 'date':
                    case 'dateTime.iso8601':
                        if (!is_a($arg, 'IXR_Date')) {
                            $ok = false;
                        }
                        break;
                }
                if (!$ok) {
                    return new IXR_Error(-32602, 'server error. invalid method parameters');
                }
            }

    предыстория. IRX_Library - XML-RPC server

    вот так оно проверяет параметры к функции. так жестко по массиву ходить не стоит... (((

    Запостил: nicolay-punin, 11 Марта 2010

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

    • Ужас. +1
      Ответить
    • Он, наверное долго пытался понять почему массив получается пустой и начал его бэкапить.
      Ответить
      • не знаю точно кто он, но при следующем рефакторе заменю эту библу на Zend аналог, а то эта уж больно капризная....
        Ответить
    • А в чем говнокод?
      Ответить
      • говнокод в том, что человек который это писал зачем-то стал использовать функции, меняющие массив. то есть удаляющие элемент. удаление элемента из массива - операция не дешевая ...
        в задаче менять массив не нужно, достаточно обратиться к его элементу $args[$i], либо пробежать форичем.

        в итоге, сделано через одно место зачем-то делается копия массива. даже не одного, а двух. Благо он не очень большой... но все-равно как-то криво
        Ответить
      • $++ сравнивается с изначальной длиной массива. Массив уже пустой, а его пытают.
        Ответить

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