Yapıyor PHP $ $ sözdizimini kullanarak, bu döngü nedir?

4 Cevap php

Ben değiştirmek zorunda bir app bu PHP kodu bulundu ...

$links = mysql_query($querystring);
foreach (mysql_fetch_array($links) as $key=>$value) 
{
    $$key = $value;
}

Ben biraz stumped.

Gerçekten sorgu sonuçları üzerinde yineleme ve anahtarının içine değeri kopyalıyor?

Eğer öyleyse, bu ne anlamı olabilir ki?

Ayrıca, çift $ $ gösterimi nedir? PHP önce görmedim ve ben PHP sitede kendisine referans bulmak için görünmüyor olabilir. Bu bir yazım hatası mı? Bu seem kodunu etkileyen olmak değildir. Ben sonuçlarını anlamadan böyle bir şey "tespit" gitmek istemiyorum.

4 Cevap

$$ bir yazım hatası değildir; Eğer başka bir değişken tarafından adında bir değişken ile nasıl etkileşimde bulunuyor. Gibi yaparsanız

$varname = 'foo';
$$varname = 'bar';

sadece $foo 'bar' için kurdum.

Ne döngü yapıyor tür extract() gibi, geçerli değişken ad içine satır içeriğini genişlemektedir. O da sayısal indeksler üzerinden yineleme var az değil, çünkü bunu yapmak için korkunç bir yoldur.

Genellikle bu gibi yazılı olduğunu görüyoruz.

$links = mysql_query($querystring);
while ($row = mysql_fetch_array($links)) 
{
    echo $row['id'];
}

$ $ A variable variable adlandırılan şeydir.

Değeri tutan vars gibi aslında anahtarlarını yapıyor gibi görünüyor. Register_globals POST / GET vb ne tür vars. Ben bunu bu şekilde yapıyor tavsiye etmem. Ben bu değişkenler üzerine yazarak gibi sorunlara yol açacaktır söylemek cesaret ve beklenmedik değişkenler mevcut olan.

Bu sql sorgu sonuçları ve sonuç yapısına dayalı anahtar-değer çiftleri yaratıyor.

$ $ Gelince, onu bir değişkene ayarlanmıştır sonucudur bu süre dışında, sadece başka bir değişken var.

$key = "hello";
$$key = "hi";
echo $key;

çıktı: "hi"

$ $ Ilk değişken saklanan adı ile değişken referans olacaktır. Yani, örneğin:

$var='some';
$some=15;
echo $$var;

İşte 15 basacaktır. It 'bazı' $ vara alır ve alır, böylece daha sonra bir değişken adı gibi, çünkü ikinci Doları ve 15 $ olan bazı değerini yazdırır alır.

Yani temelde bu kod anahtarı olarak aynı ada sahip bir değişken değerleri kopyalıyor.