Üye değişkeni için PHP kaşlı ayraç sözdizimi

5 Cevap php

SO ve gerçek bir RTFM aday bulunuyor ilk soru. Ama ben baktım ve onu bulmak için görünmüyor olabilir söz veriyorum. Ben kaçırdım, basit bir şey çıkıyor, ben mutlu bir # headpalm yapacağız.

Zend Framework anlamaya çalışıyorum ve aşağıdaki sözdizimi geldi:

$this->_session->{'user_id'}

Ben bir üye değişkeni gibi görünen erişmek için kullanılan kaşlı sözdizimi görmedim. Nasıl daha farklı

$this->_session->user_id

Ben _SESSION alakasız olduğunu varsayarak, ama olmayabilir çünkü söz onu dahil.

Bileşik değişken adı user_id kaydırmak çalışır sadece bir temizlik kongre kaşlı mı? Ya da özel bir erişimci çeşit?

TFM içine Herhangi bir işaretçiler yüzden R kadar naçizane takdir edebilirsiniz.

Çok teşekkürler. Nazik olun.

5 Cevap

Kaşlı açıkça bir değişken adı sonunu belirtmek için kullanılır. Örneğin:

echo "This square is {$square->width}00 centimeters broad."; 

Yani, durum gerçekten iki özel durumlarda bir kombinasyonudur. Sen kıvırcık parantez kullanarak sınıf değişkenleri erişmek için izin ve gibi pek konum:

$class->{'variable_name'} // Same as $class->variable_name
$class->{'variable' . '_name'} // Dynamic values are also allowed

Ve sizin durumda, sadece kaşlı ayraç sözdizimi ile onları çevreleyen ediyoruz.

PHP manual, "kompleks (kıvırcık) sözdizimi." Bkz

Ben kullanarak sadece sözdizimi biliyorum variable variables:

$userProp = 'id';
$this->_session->{'user_'.$userProp};

Bu sözdizimi, muhtemelen büyük bir avantaj gidecekseniz, ancak, onun genellikle tüylü şeyler etki ve şeyler muhtemelen önlemek istiyor.

Aksini izinsiz olarak değişken adlarında karakterleri kullanmanıza izin verir.

yani:

$this->object->{"hello world\0\n"} 
$this->object->{"function(){   this is a truely awful  name for a variable }"}

Verdiğiniz örnekte, gerçek bir fark var ve bu daha net çünkü IMO $this->_session->user_id kullanılmalıdır.

Ne kaşlı ayraç sözdizimi için aslında iyi $this->_session->{'user_id' . $index} gibi, kendi adına bir ifade oluşturarak bir üye değişkeni erişiyor.

Sorunuzu iki örnek aynı şeyi yapmak. PHP çeşitli şekillerde üye veri / yöntemlerine erişmek için izin verir ...

object->{'name_of_member'};

object->name_of_member;

$member = 'name_of_member';
object->$member;