2012-09-22 3 views
7

ben hayret edildi:PHP, 'dinamik' değişkenlere tam olarak nasıl ulaşır? Bugün Aşağıdaki kodu test edildiğinde

$star = "Aquarius"; 
$star = 11; 

ayıklarken, ben $star basitçe string türünden integer tipine değiştirir görülmektedir. Bu işlevsellik tarafından şaşırdım. Örneğin C++ 'da, bu sadece imkansız, ama C#' da var değişkenini düşündüm ama aynı değil.

Örneğin yapamayacağı:

var dynamic = "Hello"; 
dynamic = 3; 

Ben temelde $ yıldızı = 11. Benim tahminim doğrudan olmanın beri $star basitçe yeniden başlatılmakta olduğunu söylemek tam olarak ne zaman noktasında ne olacağını merak etmeye başladılar atandı (ancak yorumlayıcı zaten $star değişkeninin daha önce bildirildiğini bildiğinden bu garip görünüyor). Bazı açık veya resmi kaynak destekli açıklama ile yardımcı olabilir misiniz?

Teşekkürler.

cevap

7

++ tipi yüzünden dayalı meydana edebilirsiniz optimizasyon türlü derleme sırasında tanımlanır.

C# 'da derleyici, içeriğe dayalı olarak yazım kurar ve derleyicilerde bu tür için var anahtar sözcüğünü kullanır. Bu nedenle, derleyici ilk çıkarımı yaptıktan sonra türü değiştiremezsiniz.

PHP gibi dillerdeki betiklerde değişken, Karma Haritasına bir giriştir (İlişkilendirme Dizisi, Sembol Tablosu). Bu ad alanını (ve kapsamını) tanımlar. Gerçek değer kısmı, hem değeri hem de türü depolayan genel bir nesne türüdür.

+0

Vay, büyük aradılar oldukça ne olduğunu sanmıyorum. Yani C# 'da bir değişken asla bir * jenerik * nesne tipi olarak saklanmadığı anlamına mı geliyor? Daha fazla şey öğrenebileceğim herhangi bir kaynak sağlamanız mümkün mü? teşekkürler – rtuner

+1

C#, bir VM üzerinde çalışmak için bayt kod çıkışı veren bir dildir. PHP örneğinden bahsettiğim 'genel nesne türü', 2 üyeli bir 'C dil yapısından' başka bir şey değildir (bunu söyleyerek biraz daha basitleştiriyorum). 3 farklı dil türünden (bir montaj kodu, bir bayt kodu ve biri yorumlanmış yürütme için biri) kavramları birleştirdiğinizden daha fazla kaynak zordur. –

0

PHP, Perl, Ruby, Python veya diğer birçok yönden benzer bir dinamik dildir. Öte yandan C++, derlenmiş ve statik olarak yazılmıştır, her değişkenin derleme zamanında tanımlanmış bir tür olmasını gerektirir.

Kontrol PHP'nin dinamik yazarak uygulamasına bazı büyük fikir için PHP docs: C/C http://php.net/manual/en/language.types.type-juggling.php

+0

Bu onlar için ... –

İlgili konular