2013-01-10 9 views
5

Zrozumiałem, że nie było zbyt wiele, jeśli jest jakaś różnica między int i integer w PHP. Muszę się mylić.PHP: Konwertowanie liczby całkowitej na int - otrzymanie błędu

Przekazuję wartość całkowitą do funkcji, która ma tylko tę wartość. Tak: -

$new->setPersonId((int)$newPersonId); // Have tried casting with (int) and intval and both 

Z drugiej strony mam: -

public function setPersonId(int $value) { 
     // foobar 
    } 

Teraz, kiedy biegnę - otrzymuję komunikat: -

„PHP połów fatal error: Argument 1 przekazane do setPersonId() musi być instancją int, liczbą całkowitą podaną "

Próbowałem rzucić w połączenie z (int) i intval().

Wszelkie pomysły?

+0

PHP nie obsługuje typu podpowiedzi dla standardowych typów danych (int , podwójne), ale obsługuje typowe podpowiedzi obiektów. – gurudeb

+0

Pewnie - też to czytam - więc jakie jest rozwiązanie? – waxical

+1

usunąć 'int' z publicznej funkcji setPersonId (int $ value) – gurudeb

Odpowiedz

14

Podpowiedź typów w PHP działa tylko dla obiektów, a nie dla skalarów, więc PHP oczekuje, że przejdzie przez obiekt typu "int".

można użyć następujących jako obejście

public function setPersonId($value) { 
    if (!is_int($value)) { 
     // Handle error 
    } 
} 
+0

Jasne, przeczytałem to - ale jak możesz sobie z tym poradzić? Nie możesz się przekonwertować? Czy mówimy, że wartość musi być int od początku lub nic. – waxical

+1

Jeśli chcesz mieć wartość int, ale 'is_int' zwraca wartość false, możesz rzucić ją' $ value = (int) $ value; '. Jeśli nie obchodzi cię, czy jest to int, czy nie, po prostu usuń zaznaczenie 'is_int'. – fin1te

+0

To jest dość przerażające, ale wydaje się, że to jedyna droga. PHP go nie dostanie:/ – waxical

-2

Aby jawnie skonwertować wartość do liczby całkowitej, użyj (int) lub (Integer) rzuca. Jednak w większości przypadków rzutowanie nie jest potrzebne, ponieważ wartość zostanie automatycznie przekonwertowana, jeśli operator, funkcja lub struktura kontrolna wymaga argumentu całkowitego. Wartość można również przekonwertować na liczbę całkowitą za pomocą funkcji intval().

http://php.net/manual/en/language.types.integer.php

+0

Nigdzie w pobliżu odpowiedzi. – waxical

-3

Upewnij się, że PersonID właściwość jest zdefiniowana jako int nie integer:

private int $personId; 

zamiast

private integer $personId; 
+0

Nie jesteś w PHP, prawda? –

Powiązane problemy