Bu kesinlikle yazdığınız PHP kodu yazmak mümkün mü?

6 Cevap php

Örneğin, bu gibi bir kod yazmak mümkündür:

int $x = 6;
str $y = "hello world";
bool $z = false;
MyObject $foo = new MyObject();

Ve bu gibi işlevleri tanımlamak mümkündür:

public int function getBalance()
{
   return 555; //Or any numeric value
}

6 Cevap

No php5 beri tip ipuçlarının destek vardır, ama "Tür İpuçları sadece (PHP 5.1 'den beri) yazın. Geleneksel Tür Dayatma int ve dize ile desteklenmez nesne ve dizinin olabilir."

O kadar php anda gider gibi ve kadar bana sorarsanız o gitmeli gibidir.

PHP kesinlikle yazdınız, bu yüzden hiçbir değildir. O gets kadar yakın - O dedi, bu sınırlı type hinting fonksiyonları üzerinde desteklemiyor.

Hayır Bu sözdizimi çalışmaz.

Neyse, Sen, teorik, sıkı yazarak kendi tür zorla nesnelerin bir sistem ile gelebilir, ama bunu gerçekleştirmek olmaz ve ... neden isteyeyim?

Eğer sıkı yazmaya ihtiyacınız varsa, bir kesinlikle yazılı bir dil kullanın.

Bir PHP "linter", bir derleme zamanı kontrol C. aynı değil gibi staticly-yazdığınız dilde yakalamak istiyorsunuz bazı şeyleri yakalamak gerekir, ancak bazı sillyness önlemelidir: cevabı temelde "hayır", bir alternatif olduğu

"Is there a static code analyzer [like Lint] for PHP files" bu çok listeler.

Ne yazık ki HAYIR! Ben şimdi bir sürü alogorithms (grafik teorisi, devreler vb) içerir ve ben php seçim değil olsaydı büyük bir projenin sonunda duyuyorum.

Ben yaklaşık 10 yıldır php kullanarak, ve hala iyi bir dil olduğuna inanıyorum, ancak bir karar vermek zorunda olmuştur! Benim için kötü nedir, sıkı yazarak eksikliği başkası için iyi olabilir.

Buna ek olarak, ben sık sık katı yazarak desteklemek için ekstra kod yazdı, bahsetmek istiyorum, sadece düz bir örnek şudur:

if (is_array($r) && count($r)===0)

ve ortaya çıkarılmış hataları ve gizli durumları vb açıklama dışındadır.

Ben tüm bu ekstra kod zevk değildi ama en azından o aptalca hatalar beni kurtaracak yazma, amaca göre algılamak / düşünmek mümkün asla hata ve durumlar vardı!

Ben geri gitmek istiyorum, belki web bölümü için php seçtim, sen almak ve kullanıcıya verilerini gösteren biliyorum, php, string, diziler taşıma vs vs veritabanına konuşuyor, ama ana çekirdek için, bunun için sadece büyük Ben, C + + için gitmek belki haskell istiyorum algoritmaları vs .. kesinlikle yazdığınız en azından bir şeyler bilmiyorum.

Eğer fakir bir adamın sıkı tür denetimi simülasyonu için deneyebilirsiniz şey onu iade önce belirli bir türde olması için çıkış gücü için) (assert kullanıyor:

/**
 * Get Balance
 *
 * @return int
 */
function getBalance()
{
    /* blah blah blah */
   $out = 555; //Or any numeric value
   assert('is_int($out)');
   return $out;
}

Yani tür derleyici derleme zamanında yaptığı kontroller gibi, tüm geliştirme ve test boyunca aktif olarak iddialar tutmak.

Verilen, assert() sayfası giriş parametrelerini kontrol etmek iddialar kullanmak yerine onları kontrol etmek için normal bir conditionals kullanmak gerektiğini iddia etmek arzusundadır.

This answer Ben iyi bir kural olduğunu düşündüğüm vardı:

Çoğu dilde genelinde uygulanabilir başparmak kuralı (Ben hayal meyal biliyorum hepsi) bir assert bir koşul ise her zaman doğru olduğunu iddia etmek için kullanılır olmasıdır bir o bazen başarısız olacağı düşünülebilir ise uygun olup olmadığını.

Eğer (şiddetle türlerini korumak için kod yazma, dışarıdan giriş doğrulamak için çalışmıyorum) sıkı tip denetimi taklit ediyorsanız, o zaman bir hata yaptık sürece tip olduğunu belli olmalı.

Güncelleme:

There's also this: http://hacklang.org/ Facebook's PHP-based language with static typing.