2013-05-06 24 views
19
erişmeye ihtiyacı karşılaştıkları

/gibi bir değişken değiştirin:

$this->{$var} 

bağlam CI datamapper olsun kurallarla olduğunu. Bu sözdiziminin gerçekte ne yaptığını göremiyorum. Bu bağlamda ne yapıyor? Neden sadece değil: yalnızca:

$this->var 

Teşekkürler!

cevap

36

değişken değişkeni, $this->{value-of-$val} ile biten bittir.

bakınız: örneğin Yani http://php.net/manual/en/language.variables.variable.php

:

$this->a = "hello"; 
$this->b = "hi"; 
$this->val = "howdy"; 

$val = "a"; 
echo $this->{$val}; // outputs "hello" 

$val = "b"; 
echo $this->{$val}; // outputs "hi" 

echo $this->val; // outputs "howdy" 

echo $this->{"val"}; // also outputs "howdy" 

Çalışma örneği: tabii

Bu bir sınıf kapsamında çalışmaktadır http://3v4l.org/QNds9. Böyle aynı kolaylıkla yerel bağlamda değişken değişkenler kullanabilirsiniz:

$a = "hello"; 
$b = "hi"; 

$val = "a"; 
echo $$val; // outputs "hello" 

$val = "b"; 
echo $$val; // outputs "hi" 

Çalışma örneği: $this->{$var} ve $this->var hepsi iki ayrı şeydir ait http://3v4l.org/n16sk

+6

hmm '$ object-> attr' =' $ object -> {"attr"} ':) –

+0

@DaveChen bu örnekle de cevabımı güncelledim – jszobody

+2

Başladığım zamanı hatırlıyorum; $ this -> $ val' ve sefil başarısız oldu. Bu cevabı görmek güzel. –

8

İlk. İkincisi var sınıf değişkenini, diğeri ise $var dizgesinde bulunan değişkenin adını talep edecektir. $var'foo' dizesi ise, $this->foo ve benzeri istekte bulunacaktır.

Bu, dinamik programlama (yalnızca çalışma zamanında değişkenin adını biliyorsanız) için kullanışlıdır.

${'y - x'} = 'Ok'; 
$var = 'y - x'; 
echo ${$var}; 

değişken adı y - x çünkü boşluk ve - karakterinin geçerli olmasa bile Ok yazdırır: Garip değişken isimleri var özellikle Fakat bir dize bağlamında klasik {} notasyonu çok güçlüdür.

+1

+1! Değişken isimlerin bu kadar karmaşık olabileceğini asla bilemezdim. Yani, bir dizi/nesneyi değişken adı olarak koyabilir misin? –

+1

@DaveChen, onların dizgi temsili evet. Değişken isimler için bir uzunluk sınırı olduğunu düşünmeme rağmen. Bunun iyi bir uygulama olduğunu düşünmüyorum, bu yüzden bundan kaçınılırım. – Shoe