2013-01-10 18 views
5

PHP'de int ve integer arasında herhangi bir fark varsa, çok fazla bir şey olmadığını anladım. Yanlış olmalıyım.PHP: Tamsayıya intran alma hatasına dönüştürüyor

Sadece bu değere sahip bir işleve bir tamsayı değeri iletiyorum. böylece gibi: -

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

diğer tarafı ben: - - Ben çalıştırdığınızda

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

, ben mesajı alıyorum: -

"PHP Yakalanabilir ölümcül hata: Argüman 1 setPersonId geçirilen() 'ı (int) ve intval() ile arama döküm çalıştık int bir örneği, tam sayıdır verilen"

olmalıdır.

Herhangi bir fikrin var mı?

+0

PHP standart veri tipleri için tip-ima desteklemez (int , çiftler), ancak nesnelerin tip-ipuçlarını destekler. – gurudeb

+0

Elbette - Ben de okudum - bu yüzden çözüm nedir? – waxical

+1

public işlevinden 'int' kaldır setPersonId (int $ değer) – gurudeb

cevap

14

PHP'de yazım denetimi yalnızca scalar değil nesneler için çalışır, bu yüzden PHP "int" türünde bir nesneyi geçirmenizi bekler.

Açıkça (int) veya (tamsayı) ya integer kullanmak için bir değer dönüştürmek için geçici bir çözüm

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

Elbette, bunu okudum - ama bunu nasıl halledebilirsin? Dönüştüremezsin? Değerin başlangıçtan mı yoksa hiçbir şeyden mi olması gerektiğini mi söylüyorsun? – waxical

+1

Değerin int olmasını istiyorsanız, ancak 'is_int 'false değerini döndürürse, $ $ = (int) $ value; Int olsun veya olmasın umurumda değil, sadece 'is_int' kontrolünü kaldırın. – fin1te

+0

Bu oldukça korkunç, ama kuşkusuz gitmek için tek yol gibi görünüyor. PHP almaz:/ – waxical

-2

olarak aşağıdakileri kullanabilirsiniz atmalarını. Bununla birlikte, çoğu durumda döküm gerekli değildir, çünkü bir operatör, fonksiyon veya kontrol yapısı bir tamsayı argümanı gerektiriyorsa, bir değer otomatik olarak dönüştürülür. Bir değer ayrıca intval() işleviyle tamsayıya dönüştürülebilir.

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

+0

Cevabın yakınında yok. – waxical

-3

PersonID mülkiyet int değil tamsayı olarak tanımlandığından emin olun:

private int $personId; 

yerine

private integer $personId; 
+0

PHP'de değilsiniz, değil mi? –

İlgili konular