craz
Нестандартное звание
тогда надо было Pascal<>PHP )))кстати Духовность™ просто продемонстрировал своё знание паскаля![]()
тогда надо было Pascal<>PHP )))кстати Духовность™ просто продемонстрировал своё знание паскаля![]()
Фуу, это типа читается лучше?чему вы удивляетесь, обычный рефакторинг для уменьшения вложенности
PHP:if ($_GET['id']) { $item = $db->getItemById($_GET['id']); // вся цепочка ифов могла бы быть здесь, но когда вложенность ифов 3-4 читается отвратно. } if (isset($item) && $item) { } elseif (isset($item)) { } else { }
Спасибо кэп. Делаю всё правильно, но если бы функция isset работала по нормальному - это бы украсило мой код. Решил проблему функцией array_key_exists, хотя обычно я делаю такую проверку с помощью isset().Духовность™ написал(а):PHP <> Pascal
может ты просто что-то не так делаешь? зачем вообще нужно определить существует-ли переменная?
примеров можно придумать большое множество и на каждый из них будет обходное решение. В принципе можно вообще половину пхп выпилить и пользоваться дедовскими методами программирования. Мне хотелось сделать код читабельнее, и поэтому я создал эту тему.Духовность™ написал(а):Очень интересно посмотреть, зачем тов-щу Pascal9x понадобилось вообще делать такую проверку....
функция isset работает правильноСпасибо кэп. Делаю всё правильно, но если бы функция isset работала по нормальному - это бы украсило мой код.
function spool_write_multi($commands)
{
global $res;
if (!is_array($commands)) return false;
$result = array();
db_query('SELECT count(*) FROM nx_spool', true);
$spoolsize = intval(mysql_result($res, 0));
$swapsize = $swapsize_old = intval(runvar('swapsize'));
$dattim = SCRIPT_START;
$q_swap = array();
$q_spool = array();
$online = false;
foreach ($commands as $k=>$v)
{
//if (!isset($v['uid'], $v['cmd'], $v['send'], $v['params'])) {$result[$k]=false; continue;} //хотелось бы чтобы было так
if (!isset($v['uid'], $v['cmd'], $v['send']) or !array_key_exists('params', $v)) {$result[$k]=false; continue;}
$uid = intval($v['uid']);
$cmd = strval($v['cmd']);
$send = intval($v['send']) ? 1 : 0;
if ($uid<0 or !chklen($cmd, 1, 50)) {$result[$k]=false; continue;}
$params = (!is_null($v['params']) and (is_array($v['params']) or !$send)) ? gzserialize($v['params']) : '';
$paramsize = strlen($params);
$cmd = mysql_escape_string($cmd);
$params = mysql_escape_string($params);
if ($uid>0) $recipients = array($uid);
elseif (is_array($online)) $recipients = $online;
else {$online=array_keys(get_sessions()); $recipients=$online;}
foreach ($recipients as $recipient) if ($spoolsize>950 or $paramsize>2000)
{$q_swap[]="(0, $recipient, $send, $dattim, '$cmd', '$params')"; $swapsize++;}
else
{$q_spool[]="(0, $recipient, $send, $dattim, '$cmd', '$params')"; $spoolsize++;}
$result[$k] = true;
}
if ($q_swap) db_query('INSERT INTO nx_swap VALUES ' . implode(',', $q_swap));
if ($q_spool) db_query('INSERT INTO nx_spool VALUES ' . implode(',', $q_spool));
if ($swapsize<>$swapsize_old) runvar('swapsize', $swapsize);
return $result;
}
Проверка наличия элемента — isset (NULL — отсутствие значения http://ru2.php.net/manual/en/language.types.null.php), ключа — array_key_exists. Проверять наличие ключа (а точнее, завязывать логику приложения на наличии ключа) глупо, поэтому только isset.а проверка наличия элемента массива - через array_key_exists().
!isset($v['uid'] --> !array_key_exists('uid',$v)
в чем именно глупость?Проверять наличие ключа (а точнее, завязывать логику приложения на наличии ключа) глупо, поэтому только isset.
— а где там проверяется наличие ключа?PDO работает с NULL, т.е. в базу запишется null, если параметру байндить null
— вот! Было бы хорошо, если бы вместо Notice возвращался бы NULL (он и возвращается, BTW, просто не считать это ошибкой). Возможно ли это на данном этапе развития PHP — точно не знаю... Вроде бы ничего не мешает сделать или я ошибаюсь?для меня различие в том, что при обращении к отсутствующему ключу будет Notice
у меня— а где там проверяется наличие ключа?
ты это серьезно? Аллах велик, а Магомет - пророк его?Было бы хорошо, если бы ... Возможно ли это на данном этапе развития ...
— приведи код, плз, не понимаю о чём ты.и кидает notice, если его не будет