2011-10-24 21 views
5

Bir işlev argümanını birden fazla olası tür olarak tanımlamak mümkün müdür? Örneğin, bir işlev, bir şeyi başarmak için bir dize veya bir tamsayı alabilir. Bir şekilde bunu böyle tanımlamak mümkün mü?PHP'de çok işlevli bağımsız değişken türlerinin tanımlanması

function something(int|string $token) {} 

Veya argüman başına desteklenen tek bir tip mi?

(sakıncası, ben sadece benim argümanlar yazmış olmasını isterler, ben sonradan girdi filtreleyebilirsiniz biliyorum) yapabileceğiniz en iyi Tipi Dayatma denir ve burada açıklanmıştır

cevap

2

:

http://php.net/manual/en/language.oop5.typehinting.php

Özellikle, bir sınıf türü veya dizi türü belirtebilirsiniz, ancak (el ile de belirttiği gibi) "İnt ve dize ile geleneksel tür ipucu desteklenmiyor." Bu yüzden, başarmaya çalıştığınız şeyin bu seviyede mümkün olmadığını düşünüyorum. Bununla birlikte, kendi ambalajlarınızı vb. Oluşturabilirsiniz. Bunun için muhtemelen binlerce yol vardır.

+1

Alkış dışında bir şey kullanıyor olmalıdır, sonunda artık Tür Dayatma denir biliyoruz. – Swader

+1

PHP'de Hinting denir (sadece?) Çünkü PHP yorumlayıcısı için sadece bir ipucu söz konusudur, bu nedenle argüman tipini "yapay olarak" kontrol etmesi ve ipucuyla uyuşmaması durumunda bir hata atması talimatı verilir. Statik olarak yazılan dillerde temel ve gerekli bir şey, fonksiyonlar için sözdiziminin bir parçası, ve böyle denir ... aslında başka bir adı var sanmıyorum ... – Palantir

+0

Bu çok iyi biliyorum, teşekkürler! – Swader

0

PHP dinamik yazıldığında - ama tip ipucu dili eklendi - böylece parametreyi ima ettik eğer sizin gibi her türlü geçirebilirsiniz:

function something($token) 
{ 
    if (is_numeric($token)) { 
    // its a float, double, integer 

    } else { 
    // its a string, array, object 
    } 
} 

(kapalı Başımın tepesinde kaynakların nasıl işlendiğinden emin değilim.

Ancak kesinlikle yazılı dilde programlamak istiyorsanız, o zaman (IMHO) PHP

+0

'is_numeric' ayrıca sayısal dizeleri içerir, ancak kaynakları içermez. – deceze

+0

Teşekkürler, sadece HipHop için optimize etmeye çalışıyorum. – Swader

İlgili konular