- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 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
вот так оно проверяет параметры к функции. так жестко по массиву ходить не стоит... (((
Death 11.03.2010 19:33 # +1
guest 12.03.2010 04:46 # +1
nicolay-punin 12.03.2010 22:18 # +1
babaika 13.03.2010 09:56 # −1
точнее заменить на $j = count($args)
nicolay-punin 14.03.2010 21:40 # 0
Kraut 12.03.2010 15:17 # −1
nicolay-punin 14.03.2010 22:03 # 0
в задаче менять массив не нужно, достаточно обратиться к его элементу $args[$i], либо пробежать форичем.
в итоге, сделано через одно место зачем-то делается копия массива. даже не одного, а двух. Благо он не очень большой... но все-равно как-то криво
babaika 15.03.2010 02:27 # −1