Php tüm değişkenler. PHP'deki Değişkenler

php değişkenleriçeşitli veri türlerini (metin, sayılar, diziler vb.) içerebilen bir tür bilgi kabıdır. Genel olarak değişkenler, bunlarda belirtilen bilgileri oluşturmanıza, saklamanıza, değiştirmenize ve gelecekte hızlı bir şekilde erişmenize izin verir.

PHP'de bir değişken nasıl oluşturulur

Başlangıçta, değişkenler işareti içerir $ (dolar) - bir değişkenin kullanımının belirlenmesi, ardından harfler Latin alfabesi(a'dan z'ye ve küçük ve büyük), sonunda içerebilir sayılar... Ayrıca, adın alt çizgi kullanmasına izin verilir (sonda değil).

Değişkenleri nasıl adlandırabilirsiniz:

$ var
$ değişken
$ yıl1945
$ _değişken
Değişkenler nasıl çağrılamaz:

1 $ - sadece bir rakamdan oluşur
$ 1var - bir rakamla bir değişken ismi başlatamazsınız
$ / var - ek karakterlerde yalnızca alt çizgilere izin verilir _
$ değişken - php belgelerinde Kiril alfabesine izin verilir, ancak önerilmez
$ değişken - boşluk kullanılamaz

Her değişkene bir değer atanır. Bir değer atamak için işaretini kullanın. = (eşittir). Komut dosyasının işlenmesi sırasında, değişkenin değeri farklı koşullara bağlı olarak tekrar tekrar değişebilir.

$ şehir = "Moskova"; // $ city değişkenine bir dize (tırnak içinde) değeri Moskova atandı
$ yıl = 1147; // ve $ yıl değişkenine 1147 sayısal değeri atanır
?>

$ isim = "İskender";
$ İsim = "Alexey";
echo "$isim, $isim"; // "İskender, Alexey" görüntüleniyor
?>

PHP Değişken Çıkışı

Ayrı olarak, değişkenleri kullanarak nasıl görüntüleneceğini düşünmelisiniz. çıkış operatörleri, çalışmasını son dersimizde tartıştığımız PHP sayfası oluşturma. Çıkış operatörleri. ... Aşağıda yorumlu bazı açıklayıcı örnekler verilmiştir.

// Değişkenlere bu şekilde değer atıyoruz
$ isim1 = "Alexey";
$ isim2 = "İskender";

// Değişkenleri göster
yankı $ isim2; // Çıktı: İskender
echo "isim1 $ isim1'dir"; // isim1 Alexey'dir

// Tek tırnak kullanılırken çıktı
// değer değil değişken adı
echo "isim1 $ isim1'dir"; // yazdırır: isim1 $ isim1'dir

// değişkenlerin değerlerini basitçe görüntüleyebilirsiniz
yankı $ isim1; // Alexey
echo $isim1, $isim2; // Alexey Alexander
echo $isim1. "".$isim2; // Alexey Alexander
echo "$isim1, $isim2"; // Alexey, İskender

Eko<<Bu, çıktı almak için "burada belge" sözdizimini kullanır.
$ değişken ikamesi olan birden çok satır.
SON;

PHP Değişken İşlemleri

PHP'de aritmetik işlemler
Sayısal değerler söz konusu olduğunda, aritmetik işlemler gerçekleştirebilirsiniz: toplama, çıkarma, çarpma vb.

- bir $(olumsuzlama) $ a'nın işaretini değiştirin.
$a + $b(ek) $ a ve $ b toplamı.
$ a - $ b(çıkarma) $ a ve $ b arasındaki fark.
$ a * $ b(çarpma) $ a ve $ b'nin çarpımı.
$a / $b(bölme) $ a'nın $ b'ye bölümü.
$ a% $ b(modulo bölümü) $ a'nın $ b'ye bölümünden kalan tamsayı.
Örneklere bakalım

$a = 2; // not, sayılar söz konusu olduğunda tırnak kullanılmaz
$b = 3; // not, sayılar söz konusu olduğunda tırnak kullanılmaz

$ sonuç = $a + $b; // değişken ekle
yankı $ sonuç; // 5 yazdıracak

$ sonuç = $ b - $ a; // değişken ekle
yankı $ sonuç; // çıktı 1 olacak

PHP'de artırma ve azaltma işlemleri
Bu işlemler, esas olarak, biraz sonra konuşacağımız döngüler oluştururken faydalı olacaktır.
Önek- değişkenden ÖNCE yazılan operatörler ( - bir $; ++ $ bir). Değişkenin değişiklikten önceki değerini döndürür.
son ek- değişkenden sonra yazılan operatörler ( $ a--; $ a--). Değişkenin değiştirilmiş değerini döndürür.
artış- değeri arttırmak.
Azaltma- değeri azaltmak.

++ $ birÖnek artışı. $ a'yı birer birer artırır ve $ a döndürür.
$ a++ Postfix artışı. $ a değerini döndürür ve ardından $ a değerini birer birer artırır.
- bir $Ön ek azaltma. $ a değerini birer birer azaltır ve $ a değerini döndürür.
$ a-- Postfix azaltma. $ a değerini döndürür ve ardından $ a değerini birer birer azaltır.
Eko "

Son düzeltme artışı

";
$a = 5;
echo "5 olmalıdır:". $ a++. "\ n";

Eko "

önek artışı

";
$a = 5;
echo "6 olmalıdır:". ++$a. "\ n";
echo "6 olmalıdır:". $ a. "\ n";

Eko "

Son ek azaltma

";
$a = 5;
echo "5 olmalıdır:". $ a--. "\ n";

Eko "

Ön ek azaltma

";
$a = 5;
echo "4 olmalıdır:". - $ a. "\ n";
yankı "4: olmalıdır". $ a. "\ n";
?>

PHP atama işlemleri
Temel operatör benziyor = ... İlk bakışta, bu operatör eşit gibi görünebilir. Aslında, durum böyle değil. Aslında, atama operatörü, sol işlenenin doğru ifadenin değerine ayarlandığı anlamına gelir (yani, sonuçtaki değer tarafından ayarlanır). birleşik operatörler- bunlar, sonraki işlemler için önceki değişken değerlerini kullanmanıza izin veren operatörlerdir (bir dize değişkenine (metinle) ekleyin veya sayısal değerler ekleyin).

$ a = ($ b = 2) + 4; // sonuç: $ a, 6'ya ayarlandı, $ b, 2'ye ayarlandı.

$a = 2;
$ a + = 3; // $ a'yı 5'e ayarlar, şunu yazmaya benzer: $ a = $ a + 3;
$b = "Merhaba";
$b.="Barış!"; // $ b = $ b'de olduğu gibi $ b'yi "Merhaba Dünya!" olarak ayarlar. "Orası!";

Ayrıca orada karşılaştırma işlemleri ve zeka oyunu, ancak sonraki derslerde onlar hakkında konuşacağız. Hemen büyük miktarda bilgi ile sizi korkutmamaya çalışacağım!)

Bu ders PHP değişkenlerinin kapsamını araştırıyor. Yerel ve global kapsamlar arasındaki farkı açıklar, bir fonksiyon içindeki global değişkenlere nasıl erişileceğini, süper küresellerle nasıl çalışılacağını ve statik değişkenlerin nasıl oluşturulacağını gösterir.

PHP öğrenmeye başladığınızda ve işlevler ve nesnelerle çalışmaya başladığınızda, değişkenlerin kapsamı biraz kafa karıştırıcıdır. Neyse ki, PHP'nin bu konudaki kurallarını anlamak çok kolaydır (diğer programlama dillerine kıyasla).

Kapsam nedir?

Değişken kapsamı, bir değişkenin tanımlandığı ve ona erişilebildiği bağlamdır. PHP'nin iki değişken kapsamı vardır:

  • Küresel- değişkenlere komut dosyasında herhangi bir yerden erişilebilir
  • Yerel- değişkenlere yalnızca tanımlandıkları fonksiyon içinde erişilebilir

Değişken kapsam ve özellikle yerel kapsam, kodunuzu yönetmeyi çok daha kolaylaştırır. Tüm değişkenler global olsaydı, komut dosyasında herhangi bir yerde değiştirilebilirler. Komut dosyasının çoğu zaman farklı bölümleri aynı ada sahip değişkenler kullandığından, bu durum kaosa ve büyük komut dosyalarına yol açar. Yerel bağlamın kapsamını belirleyerek, değişkene erişebilen kodun sınırlarını tanımlayarak kodu daha sağlam, modüler ve hata ayıklamayı daha kolay hale getirirsiniz.

Kapsamı global olan değişkenlere global, yerel olarak kapsanan değişkenlere local denir.

İşte global ve yerel değişkenlerin nasıl çalıştığına dair bir örnek.

";) sayHello (); echo" Değer \ $ globalName: "$ globalName"
"; echo" Değer \ $ localName: "$ localName"
"; ?>

Selam Harry! $ GlobalName değeri: "Zoe" $ localName değeri: ""

Bu komut dosyasında iki değişken oluşturduk:

  • $ globalAd- bu küresel değişken
  • $ yerelAdı- bu yerel sayHello () işlevi içinde oluşturulan bir değişken.

Değişkeni ve işlevi oluşturduktan sonra, komut dosyası "Merhaba Harry!" çıktısını veren sayHello () öğesini çağırır. ... Komut dosyası daha sonra iki değişkenin değerlerini yankılamaya çalışır. İşte neler oluyor:

  • Çünkü $ globalAd işlevin dışında oluşturuldu, komut dosyasının herhangi bir yerinde kullanılabilir, bu nedenle "Zoya" görüntülenir.
  • $ yerelAdı yalnızca sayHello () işlevinde kullanılabilir. Echo ifadesi fonksiyonun dışında olduğu için PHP yerel değişkene erişime izin vermez. Bunun yerine PHP, kodun, boş bir dizenin varsayılan değerini alacak olan $ localName adında yeni bir değişken oluşturacağını varsayar. bu nedenle ikinci echo çağrısı $ localName değişkeni için "" değerini yazdırır.

Bir fonksiyon içindeki global değişkenlere erişme

Global bir değişkene erişmek için işlevsiz sadece adını yaz. Ancak global değişkene erişmek için iç fonksiyon, önce global anahtar sözcüğünü kullanarak işlevde değişkeni global olarak bildirmelisiniz:

İşlev myFunction () (global $ globalVariable; // $ globalVariable global değişkenine erişim)

Bunu yapmazsanız, PHP yerel bir değişken oluşturduğunuzu veya kullandığınızı varsayar.

Bir işlev içinde global bir değişken kullanan örnek bir komut dosyası:

"; global $ globalName; echo" Merhaba $ globalName!
";) sayMerhaba ();?>

Yürütüldüğünde, komut dosyası şu çıktıyı verir:

Selam Harry! Merhaba Zoya!

sayHello () işlevi, $ globalName değişkenini global olarak bildirmek için global anahtar sözcüğünü kullanır. Ardından değişkene erişebilir ve değerini ("Zoya") görüntüleyebilir.

Süper küreseller nelerdir?

PHP, çeşitli bilgiler içeren özel bir önceden tanımlanmış global dizilere sahiptir. Bu tür diziler denir süper küreseller,çünkü iç fonksiyon alanı da dahil olmak üzere betiğin herhangi bir yerinden erişilebilirler ve global anahtar kelime kullanılarak tanımlanmaları gerekmez.

PHP 5.3'te bulunan süper küresellerin listesi:

  • $ GLOBALS - komut dosyasındaki tüm global değişkenlerin listesi (süper küreseller hariç)
  • $ _GET - Bir GET isteği kullanarak tarayıcı tarafından gönderilen tüm form alanlarının bir listesini içerir
  • $ _POST - tarayıcı tarafından bir POST isteği kullanılarak gönderilen tüm form alanlarının bir listesini içerir
  • $ _COOKIE - tarayıcı tarafından gönderilen tüm çerezlerin bir listesini içerir
  • $ _REQUEST - $ _GET, $ _POST, $ _COOKIE dizilerinde bulunan tüm anahtar / değer kombinasyonlarını içerir
  • $ _FILES - tarayıcı tarafından yüklenen tüm dosyaların bir listesini içerir
  • $ _SESSION - geçerli tarayıcı için oturum değişkenlerini saklamanıza ve kullanmanıza olanak tanır
  • $ _SERVER - yürütülmekte olan betiğin dosya adı ve tarayıcının IP adresi gibi sunucu hakkında bilgileri içerir.
  • $ _ENV - PHP'ye aktarılan ortam değişkenlerinin bir listesini içerir, örneğin CGI değişkenleri.
Örneğin, komut dosyası isteğinin URL dizesinde yer alan değişkenlerin değerlerini almak ve bunları sayfada görüntülemek için $ _GET kullanabilirsiniz:

Yukarıdaki komut dosyasını http://www.example.com/script.php?adınız=Fred URL dizesiyle çalıştırırsanız, şu çıktıyı verir:

Merhaba Fred!

Bir uyarı! Gerçek bir komut dosyasında, zayıf güvenlik nedeniyle bu tür veri aktarımını asla kullanmamalısınız. Verilerinizi her zaman kontrol etmeli veya filtrelemelisiniz.

$ GLOBALS superglobal'in kullanımı çok uygundur çünkü global anahtar kelimeyi kullanmaya gerek kalmadan bir fonksiyondaki global değişkenlere erişimi düzenlemenize izin verir. Örneğin:

";) sayHello (); // Çıktıları "Merhaba Zoe! "?>

Statik değişkenler: yakınlarda bir yerdeler

Bir işlev içinde yerel bir değişken oluşturduğunuzda, yalnızca işlev çalışırken var olur. İşlev sona erdiğinde, yerel değişken kaybolur. Fonksiyon tekrar çağrıldığında yeni bir yerel değişken yaratılır.

Bu çoğu durumda harika çalışıyor. Bu şekilde işlevler bağımsızdır ve her çağrıldıklarında aynı şekilde çalışırlar.

Ancak, işlev çağrıları arasındaki değerini "hatırlayan" bir yerel değişken yaratmanın uygun olacağı durumlar vardır. Böyle bir değişkene statik denir.

Bir fonksiyonda statik değişken oluşturmak için, değişken adının önünde static anahtar sözcüğünü kullanmalı ve ona bir başlangıç ​​değeri verdiğinizden emin olmalısınız. Örneğin:

işlev myFunction () (statik $ myVariable = 0;)

Statik bir değişken kullanmanın uygun olduğu bir durumu ele alalım. Diyelim ki, çağrıldığında bir pencere öğesi oluşturan ve önceden oluşturulmuş pencere öğelerinin sayısını görüntüleyen bir işlev oluşturdunuz. Yerel bir değişken kullanarak şöyle bir kod yazmayı deneyebilirsiniz:


"; echo createWidget()." zaten oluşturduk.
"; echo createWidget()." zaten oluşturduk.>
"; ?>

Ancak, işlev her çağrıldığında $ numWidgets değişkeni oluşturulduğundan, aşağıdaki sonucu alırız:

Bazı widget'lar oluşturuyoruz ... 1 zaten oluşturduk. 1 zaten oluşturduk. 1 zaten oluşturduk.

Ancak statik bir değişken kullanarak, bir işlev çağrısından diğerine değeri saklayabiliriz:

"; echo createWidget()." zaten oluşturduk.
"; echo createWidget()." zaten oluşturduk.
"; echo createWidget()."> zaten oluşturduk.
"; ?>

Komut dosyası şimdi beklenen çıktıyı üretecek:

Bazı widget'lar oluşturuyoruz ... 1 zaten oluşturduk. 2 zaten oluşturduk. 3 zaten oluşturduk.

Statik bir değişken, değerini işlev çağrıları arasında tutsa da, yalnızca komut dosyasının yürütüldüğü sırada geçerlidir. Komut dosyasının yürütülmesini bitirir bitirmez, yerel ve global değişkenlerin yanı sıra tüm statik değişkenler de yok edilir.

Bu kadar! PHP belgelerini sık sık kontrol edin.

Windows'taki ortam değişkenleri (ortam), sistem ayarları ve kullanıcının ortamı hakkında çeşitli bilgiler içerir. Kullanıcı, sistem ve süreç ortamı değişkenlerini ayırt edin.

Windows'ta ortam değişkenlerinin içeriğini görüntülemenin en kolay yolu sistem özelliklerini açmaktır ( sysdm.cpl) -> Gelişmiş -> Ortam Değişkenleri. Gördüğünüz gibi, açılan bölümde iki bölüm var: üst kısım kullanıcının ortam değişkenlerini içerir, alt kısım ise sistem değişkenlerini içerir.

Ayrıca, ortam değişkenleri sistem kayıt defterinde saklanır. Özel değişkenler bölümde saklanır. Sistem - giriş HKLM \ SYSTEM \ CurrentControlSet \ Kontrol \ Oturum Yöneticisi \ Ortam.

Windows komut satırında tüm ortam değişkenlerinin değerlerini görüntüleyebilirsiniz. Komut basittir:

Komut, ortam değişkenlerini ve değerlerini listeler.

PowerShell'de, tüm ortam değişkenlerini görüntülemek için şu komutu kullanabilirsiniz:

Yalnızca bir değişkenin değerini görüntülemek istiyorsanız, yankı komutunu kullanmanız ve değişken adının yüzde işaretleri içine alınması gerekir. Örneğin,

Eko% sistem kökü%

ayarla> c: \ tmp \ env_var.txt

Belirli bir işlemin ortam değişkenleri ücretsiz bir yöntem kullanılarak elde edilebilir. İşlem Gezgini yardımcı programları(Sysinternals'dan). İşlemin özelliklerini açıp sekmeye gitmeniz yeterlidir. Çevre.

13 yıl önce

Dikkat etmeniz gereken küçük bir şey:

RegisterGlobals ve ilgilileri kapatırsanız, get_defined_vars() işlevini kullanın, aşağıdakine benzer bir şey görebilirsiniz:

Dizi
[KÜRESEL] => Dizi
[KÜRESEL] => Dizi
* TEKRARLAMA *
[_POST] => Dizi ()
[_GET] => Dizi ()
[_COOKIE] => Dizi ()
[_FILES] => Dizi ()
)

[_POST] => Dizi ()
[_GET] => Dizi ()
[_COOKIE] => Dizi ()
[_FILES] => Dizi ()

)
?>

$ _SERVER'ın orada olmadığına dikkat edin. Görünüşe göre php, süper küresel $ _SERVER'ı yalnızca bir yerde kullanılıyorsa yükler. Bunu yapabilirsiniz:

Yazdır "

". htmlspecialchars (print_r (get_defined_vars (), doğru))."
" ;
Yazdır "
". htmlözel karakterler (print_r ($ _SERVER, true))."
" ;
?>

Ve sonra her iki listede de $ _SERVER görünecektir. Sanırım bu "gerçekten bir şey değil, çünkü her iki şekilde de kötü bir şey olmayacak, ama yine de ilginç bir merak.

6 yıl önce

get_defined_vars () değişkenleri yalnızca işlevi çağırdığınız noktada aldığından, geçerli kapsamda tanımlanan değişkenleri almanın basit bir yolu vardır.

// php betiğinizin en üst kısmı
$ değişkenler = get_defined_vars();

// Şimdi işini yap
$ foo = "foo";
$ bar = "bar";

// Geçerli kapsamda tanımlanan tüm değişkenleri alın
$ değişkenler = array_diff (get_defined_vars(), $ değişkenler);

Eko "

"
;
print_r ($ değişken);
Eko "
" ;
?>

15 yıl önce

Görüntüleme veya e-posta için bir hata ayıklama raporu oluşturan bir işlev burada
get_defined_vars kullanarak. Olmadan ayrıntılı bir anlık görüntü elde etmek için harika
kullanıcı girişine bağlı.

function createDebugReport ($ yöntemi, $ tanımlanmış_vars, $ email = "tanımsız") (
// Görüntülemek veya e-postayla göndermek için bir hata ayıklama raporu oluşturma işlevi.
// Kullanım: createDebugReport (yöntem, get_defined_vars (), e-posta);
// Yöntemin "tarayıcı" veya "e-posta" olduğu yer.

// "get_defined_vars" tarafından döndürülen anahtarlar için bir yok sayma listesi oluşturun.
// Örneğin, HTTP_POST_VARS, HTTP_GET_VARS ve diğerleri
// gereksiz (_POST, _GET ile aynı)
// Güvenlik nedeniyle yok sayılmasını istediğiniz değişkenleri de dahil edin - ör. PHPSESSID.
$ görmezden liste = dizi ("HTTP_POST_VARS", "HTTP_GET_VARS",
"HTTP_COOKIE_VARS", "HTTP_SERVER_VARS",
"HTTP_ENV_VARS", "HTTP_SESSION_VARS",
"_ENV", "PHPSESSID", "SESS_DBUSER",
"SESS_DBPASS", "HTTP_COOKIE");

$ zaman damgası = tarih ("a / g / y s: m: s");
$ mesaj = "Hata ayıklama raporu oluşturuldu $ zaman damgası \ n";

// İyi bir ölçüm için son SQL hatasını alın, burada $ link kaynak tanımlayıcıdır
// mysql_connect için. Veritabanınız veya soyutlama kurulumunuz için yorum yapın veya değiştirin.
küresel $ bağlantısı;
$ sql_error = mysql_error ($ bağlantı);
if ($ sql_error) (
$ mesaj. = "\ nMysql Mesajları: \ n". mysql_error ($ bağlantı);
}
// MySQL'i sonlandır

// Burada özyinelemeli bir işlev kullanılabilir. Kaptın bu işi ;-)
foreach ($ tanımlı_vars as $ anahtar => $ değer) (
if (is_array ($ val) &&! in_array ($ tuşu, $ yok sayma listesi) && count ($ val)> 0) (
$ mesaj. = "\ n $ anahtar dizisi (anahtar = değer): \ n";
foreach ($ val as $ subkey => $ subval) (
if (! in_array ($ alt anahtar, $ yoksayma listesi) &&! is_array ($ alt değer)) (
$ mesaj. = $ alt anahtar. "=". $ subval. "\ n";
}
elseif (! in_array ($ alt anahtar, $ yok sayma listesi) && is_array ($ alt değer)) (
foreach ($ subval as $ subsubkey => $ subsubval) (
if (! in_array ($ alt anahtar, $ yoksayma listesi)) (
$ mesaj. = $ alt anahtar. "=". $ subsubval. "\ n" ;
}
}
}
}
}
başka (!
is_array ($ değer) &&! in_array ($ tuşu, $ yok sayma listesi) && $ val) (
$ mesaj. = "\ nDeğişken". $ anahtarı. "=". $ val. "\ n";
}
}

Eğer ($ method == "tarayıcı") (
echo nl2br ($ mesaj);
}
elseif ($ method == "e-posta") (
if ($ email == "tanımsız") (
$ email = $ _SERVER ["SERVER_ADMIN"];
}

$ mresult = mail ($ email, "Debug Report for". $ _ENV ["HOSTNAME"]. "", $ mesaj);
if ($ mresult == 1) (
Eko "Hata Ayıklama Raporu başarıyla gönderildi. \ N";
}
Başka (
Eko "Hata Ayıklama Raporu gönderilemedi. \ N";
}
}
}
?>

17 yıl önce

get_defined_vars nesnesini XML'e dönüştürmek için basit bir rutin.

function obj2xml ($ v, $ girinti = "") (
while (liste ($ anahtar, $ val) = her biri ($ v)) (
($ key == "__attr") devam ederse;
// __attr olup olmadığını kontrol et
if (is_object ($ val -> __attr)) (
while (list ($ key2, $ val2) = her biri ($ val -> __attr)) (
$ öznitelik = "$ anahtar2 = \" $ değer2 \ "";
}
}
yoksa $ attr = "";
if (is_array ($ değer) || is_object ($ değer)) (
yazdır ("$ girinti< $key$attr >\ n ");
obj2xml ($ değer, $ girinti "");
yazdır ("$ girinti\ n ");
}
else print ("$ girinti< $key$attr >$ değer\ n ");
}
}

// Örnek nesne
$ x -> isim -> ilk = "John";
$ x -> isim -> son = "Smith";
$ x -> arr ["Meyve"] = "Muz";
$ x -> arr ["Sebze"] = "Havuç";
$ y -> müşteri = $ x;
$ y -> müşteri -> __attr -> id = "176C4";

$ z = get_defined_vars();
obj2xml ($ z ["y"]);
?>
çıktı alacak:


John
Smith


muz
Havuç

11 yıl önce

Bir not olarak, get_defined_vars () bir dizi değişken referansı döndürmez (umduğum gibi). Örneğin:

// bir değişken tanımla
$ my_var = "foo";

// tanımlı değişkenler listemizi alın
$defined_vars = get_defined_vars();

// şimdi değeri döndürülen dizi aracılığıyla değiştirmeyi deneyin
$ tanımlanmış_vars ["my_var"] = "bar";

echo $ my_var, "\ n";

?>

"foo" (orijinal değer) çıktısını alacaktır. "get_defined_vars() onları referans yapmak için isteğe bağlı bir argümana sahip olsaydı iyi olurdu, ancak bunun oldukça özel bir istek olduğunu hayal ediyorum. Bunu kendiniz (daha az uygun bir şekilde) aşağıdaki gibi bir şeyle yapabilirsiniz:

$ tanımlı_vars = dizi();
$ var_names = dizi_anahtarları (get_defined_vars());

foreach ($ var_names as $ var_name)
{
$ tanımlanmış_vars [$ var_name] = & $ $ var_name;
}

?>

1 yıl önce

Burada daha önce "bu"nun get_defined_vars'da olmasıyla ilgili gönderi paylaşmıştım.

Her zaman orada olmadığı, ancak bazı durumlarda anlaşılmaz bir şekilde ortaya çıkacağı ortaya çıktı.

php -r"
sınıf Testi (
genel işlev a () (var_dump (array_keys (get_defined_vars ())); $ a = 123;)
genel işlev b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t = yeni Test ();
$t-> a();
$t-> b();
"

Dizi ()
dizi ("bu")

Bu PHP 7.2'de olmaz ama PHP 5.6'da olur.

1 yıl önce

Buradaki bazı yorumlar, bu işlevin referans döndürmeyeceğine işaret ediyor. Ancak adları döndürür ve adlar "referanslardır".

Burada referanslara dönüştüren önerileri tavsiye etmem.

Genel işlev x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) $ anahtarı olarak)
if ($ tuşu! == "bu")
$ bu-> y ($ ($ tuşu));
}

Genel işlev y (& $ girişi) (
$ girdi ++;
}

$() yerine $$ da kullanabilirsiniz.

Zamanında son derece genel kod yapmak için bazı çılgınca şeyler yaptım ama "asla yukarıdaki gibi bir şey yapmak zorunda kalmadım. Çalışmayabilir bile (ancak "$ a [$ anahtarı] ile farklı olmadığı için çalışmalı).

Ayrıca $$ key ++ da yapabilirsiniz, ancak "hiç" korkunç derecede kötü olmayan bir kod görmedim (dinamik "t yararlı" olmadığında dinamik kullanarak).

Böyle bir şey yapıyorsanız, o zaman ek bir inceleme yapın.