Cytat(wookieb @ 30.10.2011, 01:26:49 )

Pokaże proszę większy kawałek kodu ponieważ to co masz teraz nie jest błędne póki co.
OK, tu masz cały kod tego fragmentu, ale uważam, że nie ma co więcej pokazywać, bo ten kawałek albo jest błędny, albo odkryłem buga w PHP.
Kod
if($model->patient != '')
{
if(is_numeric($model->patient))
{
$pat = Pacjenci::model()->find('ID=?', array($model->patient));
if($pat !== null)
{
$patientName = mb_convert_case($pat->PATIENT, MB_CASE_TITLE, "UTF-8");
$patientPESEL = $pat->PESL;
$patientPESEL = ($patientPESEL != '') ? ', '.$patientPESEL : '';
$patient = $patientName.$patientPESEL;
}
else $patient = '';
}
throw new CException('Błąd przy wywołaniu funkcji „<em>Pacjenci::model()->find()</em>” — identyfikator pacjenta nie jest liczbą!<div class="exception">(jak identyfikator pacjenta przekazano wartość = "'.$model->patient.'")</div>');
}
else $patient = '';
Kod ma zamienić identyfikator liczbowy pacjenta, na jego imię i nazwisko wraz z PESELem. Dodałem to zabezpieczenie w zasadzie dla picu (bo bez niego wio było OK), no i się rozłożyłem, że PHP zdurniał na czymś tak banalnym.
$model->patient "przyjeżdża" jako string, ale na pewno liczba, jest castowany na int, więc pokazany na zrzutce IF pod żadnym pozorem nie ma prawa zwrócić FALSE, a zwraca.
Cytat(darko @ 30.10.2011, 01:31:24 )

Jaki jest sens rzutować zmienną do inta tuż przed sprawdzeniem is_int ? Wywal to rzutowanie i sprawdź czy zadziała albo po prostu rzutuj bez sprawdzania.
Sens jest taki, żeby się is_int nie wywalił, jeśli zmienna jest liczbą, ale typu string (co zdarza się w formularzach dość nagminnie). Robi dokładnie to samo, co is_numeric, bo is_numeric to cast zmiennej na int i wpuszczenie jej do is_int.
Jak widzisz, z poprzedniej mojej odpowiedzi, zamieniłem już w międzyczasie ten fragment kodu na if(is_numeric($model->patient)).
Niestety, nic to nie zmienia. Zarówno is_int, jak i is_numeric rozwalają się zupełnie mimo, że zmienna podana jako ich argument na pewno jest liczbą (czego dowodem jest komunikat wyświetlony na ekranie, w którym w podwójnych cudzysłowach daję dokładnie to, co sprawdziłem i na sprawdzaniu czego się wywaliło).
Albo ze zmęczenia jestem ślepy i nie widzę czegoś boleśnie oczywistego, albo PHP zdurniał i twierdzić, że 3 lub "3" to nie liczba.