Bu gibi düşünmek yararlı olabilir: PHP, tüm değişkenler gerçekten bazı işaretçi tür vardır: sembol tablosunda girişleri - değerleri değişken isimlerini eşleyen şey - bir zval *
içerir Zend Motoru C uygulaması.
Atama sırasında - Bu fonksiyon argümanları ayar içerir - sihirli olur:
Eğer $a = $b
, değerin bir kopyası $b
oluşturulacak ve bu yeni değer bir işaretçi için sembol tablosu girişine yerleştirilir edilecektir sembolü tablosu girdisinde tarafından işaret yoksa $a
. Şimdi, $a
ve $b
farklı değerlere işaret eder. PHP varsayılan arama kongre olarak kullanır.
Eğer $a =& $b
yaparsanız, için sembol tablosu girdisi $a
$b
için sembol tablosu girdisinde bulunan işaretçi ayarlanır. Bu demektir $a
ve $b
şimdi aynı değere işaret - onlar programcı tarafından ribaund kadar eşit haklara sahip birbirinden rumuzudur. Onlar aynı nesneye hem göstericisidir - Ayrıca $a
gerçekten bir başvuru olmadığını to $b
unutmayın.
'Adlar' onları çağıran C + + 'referans uygulamasına farklılıkları vurgulamak için iyi bir fikir olabilir bu yüzden:
C + +, bu değişken oluşturulan bir değer ve bir başvuru içeren bir değişken eşit değildir - bu başvuruları sarkan böyle şeyler vardır nedeni budur.
Temiz olması için: tüm değişkenler zaten içten işaretçileri olarak uygulanır ve bu nedenle bunların her biri için act, bir referans olarak PHP bir referans türü gibi hiçbir şey yoktur.
PHP5 nesneler hala bu açıklama ile tutarlı vardır - onlar not referans geçti, ama bir pointer to the object (manuel bir 'nesne tanımlayıcı' diyor - bu gerçek bir olarak uygulanabilir olmayabilir C pointer - Ben bu kontrol etmedi) by value () yukarıda açıklandığı gibi atama kopyalanan anlam geçirilir.
details on the relation between PHP5 objects and references için manuel kontrol edin.