Bu dinamik olarak $başvurusu iş değil, ama oluyor
PHP başı olarak belgeler Variable variables hakkında:
bu $dinamik referans edilemez özel bir değişkendir
Ancak yanlış bir şey gibi görünüyor, en azından PHP sürümü üzerinde test ettik (5.5.12).
class ThisIsBugged
{
public function __construct()
{
${'this'}->doSomething(); // This works, while it shouldn't
}
}
Soru #1: Bunu nasıl yapabiliriz? Belgelere göre değil.
Ama daha fazlası var.
class ThisIsBugged
{
public function __construct()
{
// This does not work, but it could. See below.
${'th' . 'is'}->doSomething();
}
}
Beklendiği gibi, yürütme durur
PHP Uyarı: Tanımsız değişken: bu
PHP Ölümcül hata: bir üye işlev birşey Çağrı() olmayan nesne.
Deyim {'th' . 'is'}
değerlendirilmiş not:"Tanımlanmamış değişken:" . bu .
Ancak (bu da tuhaf!), açıkça özel değişken referans $this
, tüm düzeltmeleri dinamik başvuruları yöntem içerisinde veya sonrasında, daha önce kullanılan.
class ThisIsBugged
{
public function __construct()
{
// Now it works while it shouldn't
${'th' . 'is'}->doSomething();
// This fixes both the previous and the subsequent calls
$unused = $this;
// Now it works while it shouldn't
${'th' . 'is'}->doSomething();
}
}
Soru #2Nasıl $this
açık bir başvuru bütün yöntemi $this
tüm diğer dinamik başvurur tamir EDEBİLİR MİSİN?
CEVAP
PHP derlenen değişkenler (CV) optimizasyon dediğimiz bir kavram kullanır. Bu değerlerine değişken adları eşleştiren bir karma tablo kullanmak yerine, düz dizi ve bir dizin kullanmak anlamına gelir. Derleyici hangi dizini karşılık gelen bilir. Sahne dizi dizin aramaları karma tablo arama yapmak oldukça hızlıdır.
$this
değişken de bu şekilde depolanacak ve dizin için özel olarak op_array->this_var
olarak hatırlanır. Eğer $this
hiçbir faydası bulunursa bu değeri başlatılmamış sol -1
. VM üzerine yeni bir yürütme içeriği zorlandığında yığın PHP -1
mi, başlatılamıyor $this
değişken girdi değil mi op_array->this_var
ve, kontrol edecek.
Değişken erişirken, PHP CV tablo ile yürüme mesafesinde ve buna uygun sembol bir karma tablo inşa edecek. Tabii ki sadece aslında CV tablosunda hangi değişkenler ekleme $this
içermese bile tanımsız değişken bir arama ile bitireceğiz.
Şimdi düşünün üç vaka:
$this
${"this"}
PHP derleyici ile ilgili olarak aynı değişken adı her iki durumda derleme zamanında bilinen sonra ().- PHP 5 gibi.x derleyici henüz sabit ifade katlanır gerçekleştirmez, ancak
${"th"."is"}
$this
bir erişim olduğunu tespit etmek mümkün olmayacaktır.this_var
öyle kalır başlatılmamış. $this
düz bir kullanımı var son durum, gibithis_var
set ve değişken-değişken bir arama yoluyla da erişilebilir olacak.
Durum 7 - her zaman $this
dolaylı aramaları her zaman çalışması gerektiği çok değişken bir arama this_var
set edeceğiz PHP farklı olduğunu unutmayın.
Dinamik olarak'IE t iş değil css ...
Neden iyi bir fikir için dinamik olara...
bir WordPress kullanmak .('değişt...
Nasıl iki JavaScript nesnelerin özelli...
Olay dinamik olarak oluşturulan öğeler...