PHP'deki değişkenler. PHP Php'deki değişkenler tüm post değişkenlerini döker

Windows'taki ortam (ortam) değişkenleri, sistem ayarları ve kullanıcının ortamı hakkında çeşitli bilgiler içerir. Kullanıcı, sistem ve süreç ortamı değişkenleri arasında ayrım yapın.

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

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 \\ Control \\ Session Manager \\ Environment.

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

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

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

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

Echo% systemroot%

set\u003e c: \\ tmp \\ env_var.txt

Belirli bir işlemin ortam değişkenleri ücretsiz olarak elde edilebilir. process Explorer yardımcı programları (Sysinternals'dan). İşlemin özelliklerini açıp sekmeye gitmeniz yeterli Çevre.

13 yıl önce

Biraz dikkat etmelisin:

RegisterGlobals'ı ve ilgili olanı kapatırsanız, sonra get_defined_vars () kullanırsanız, aşağıdakine benzer bir şey görebilirsiniz:

Dizi
[GLOBALS] \u003d\u003e Dizi
[GLOBALS] \u003d\u003e Dizi
* RECURSION *
[_POST] \u003d\u003e Dizi ()
[_GET] \u003d\u003e Dizi ()
[_COOKIE] \u003d\u003e Dizi ()
[_FILES] \u003d\u003e Dizi ()
)

[_POST] \u003d\u003e Dizi ()
[_GET] \u003d\u003e Dizi ()
[_COOKIE] \u003d\u003e Dizi ()
[_FILES] \u003d\u003e Dizi ()

)
?>

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

yazdır "

". htmlspecialchars (print_r (get_defined_vars (), doğru))."
" ;
yazdır "
". htmlspecialchars (print_r ($ _SERVER, doğru))."
" ;
?>

Ve sonra her iki listede $ _SERVER görünecektir. Sanırım bu gerçekten bir aldatma 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ünde
$ değişken \u003d get_defined_vars ();

// Şimdi işinizi yapın
$ foo \u003d "foo";
$ bar \u003d "bar";

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

eko "

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

15 yıl önce

İşte görüntüleme veya e-posta için bir hata ayıklama raporu oluşturan bir işlev
get_defined_vars kullanarak. Olmadan ayrıntılı bir anlık görüntü elde etmek için harika
kullanıcı girdisine güvenerek.

function generateDebugReport ($ yöntem, $ tanımlı_vars, $ e-posta \u003d "tanımsız") (
// Görüntülenecek veya e-postayla gönderilecek bir hata ayıklama raporu oluşturma işlevi.
// Kullanım: generateDebugReport (yöntem, get_defined_vars (), e-posta);
// Yöntem "tarayıcı" veya "e-posta" olduğunda.

// "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ı)
// Ayrıca güvenlik nedenleriyle göz ardı edilmesini istediğiniz değişkenleri de ekleyin - ör. PHPSESSID.
$ ignorelist \u003d array ("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ı \u003d tarih ("a / g / y s: d: s");
$ message \u003d "Hata ayıklama raporu oluşturuldu $ zaman damgası \\ n";

// İyi ölçü 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ı;
$ sql_error \u003d mysql_error ($ bağlantı);
eğer ($ sql_error) (
$ message. \u003d "\\ 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 olarak $ anahtar \u003d\u003e $ val) (
eğer (is_array ($ değer) &&! in_array ($ anahtar, $ yok sayma) && say ($ değer)\u003e 0) (
$ mesaj. \u003d "\\ n $ anahtar dizisi (anahtar \u003d değer): \\ n";
foreach ($ val as $ subkey \u003d\u003e $ subval) (
eğer (! in_array ($ subkey, $ ignorelist) &&! is_array ($ subval)) (
$ mesaj. \u003d $ alt anahtar. "\u003d". $ subval. "\\ n";
}
elseif (! in_array ($ subkey, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval as $ subsubkey \u003d\u003e $ subsubval) (
eğer (! in_array ($ subsubkey, $ ignorelist)) (
$ mesaj. \u003d $ alt anahtar. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
elseif (!
is_array ($ değer) &&! in_array ($ key, $ ignorelist) && $ val) (
$ mesaj. \u003d "\\ nDeğişken". $ anahtar. "\u003d". $ val. "\\ n";
}
}

Eğer ($ yöntem \u003d\u003d "tarayıcı") (
echo nl2br ($ mesaj);
}
elseif ($ yöntem \u003d\u003d "e-posta") (
eğer ($ e-posta \u003d\u003d "tanımsız") (
$ e-posta \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Hata Ayıklama Raporu". $ _ENV ["HOSTNAME"]. "", $ mesaj);
eğer ($ mresult \u003d\u003d 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

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

function obj2xml ($ v, $ girinti \u003d "") (
while (liste ($ anahtar, $ değer) \u003d her biri ($ v)) (
($ key \u003d\u003d "__attr") devam ederse;
// __attr olup olmadığını kontrol edin
eğer (is_object ($ değer -\u003e __attr)) (
while (liste ($ anahtar2, $ değer2) \u003d her biri ($ değer -\u003e __attr)) (
$ attr. \u003d "$ anahtar2 \u003d \\" $ değer2 \\ "";
}
}
başka $ attr \u003d "";
eğer (is_array ($ değer) || is_object ($ değer)) (
baskı ("$ girinti< $key$attr >\\ n ");
obj2xml ($ değer, $ girinti. "");
baskı ("$ girinti\\ n ");
}
else yazdır ("$ girinti< $key$attr > $ val\\ n ");
}
}

// Örnek nesne
$ x -\u003e ad -\u003e ilk \u003d "John";
$ x -\u003e isim -\u003e soy \u003d "Smith";
$ x -\u003e dizi ["Meyve"] \u003d "Bannana";
$ x -\u003e arr ["Sebze"] \u003d "Havuç";
$ y -\u003e müşteri \u003d $ x;
$ y -\u003e müşteri -\u003e __attr -\u003e id \u003d "176C4";

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


John
Smith


Bannana
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ımlayın
$ my_var \u003d "foo";

// tanımlı değişkenler listemizi alın
$ tanımlı_vars \u003d get_defined_vars ();

// şimdi döndürülen dizi aracılığıyla değeri değiştirmeyi deneyin
$ tanımlı_vars ["my_var"] \u003d "çubuk";

echo $ my_var, "\\ n";

?>

"foo" (orijinal değer) çıktı verir. Get_defined_vars () 'ın referans yapmak için isteğe bağlı bir argümanı olsaydı iyi olurdu, ancak bunun oldukça özel bir istek olduğunu düşünüyorum. Bunu kendiniz (daha az rahatlıkla) aşağıdaki gibi bir şeyle yapabilirsiniz:

$ tanımlı_vars \u003d dizi ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names as $ var_name)
{
$ tanımlı_vars [$ var_name] \u003d & $ $ var_name;
}

?>

1 yıl önce

Burada daha önce get_defined_vars içinde "bu" olduğundan bahsetmiştim.

Görünüşe göre her zaman orada değil ama bazı durumlarda açıklanamaz bir şekilde ortaya çıkacak.

Php -r "
sınıf Testi (
public function a () (var_dump (array_keys (get_defined_vars ())); $ a \u003d 123;)
public function b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t \u003d yeni Test ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Dizi ()
dizi ("bu")

Bu PHP 7.2'de olmamakla birlikte PHP 5.6'da gerçekleşecektir.

1 yıl önce

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

Burada referansa dönüştüren önerileri önermem.

Genel işlev x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) $ anahtar olarak)
eğer ($ anahtar! \u003d\u003d "bu")
$ this-\u003e y ($ ($ anahtar));
}

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

$ () Yerine $$ da kullanabilirsiniz.

Son derece genel kod yapmak için zamanımda bazı saçma şeyler yaptım ama hiçbir zaman yukarıdaki gibi bir şey yapmak zorunda kalmadım. Çalışmayabilir bile (ama $ a [$ key] 'den farklı olmadığı için olmalı).

Ayrıca $$ key ++ 'ı da yapabilirsiniz, ancak korkunç derecede kötü olmayan bir kod görmedim (dinamiğin yararlı olmadığı dinamikleri kullanmak).

Eğer böyle bir şey yapıyorsanız, o zaman ek bir inceleme yapın.

13 yıl önce

Biraz dikkat etmelisin:

RegisterGlobals'ı ve ilgili olanı kapatırsanız, sonra get_defined_vars () kullanırsanız, aşağıdakine benzer bir şey görebilirsiniz:

Dizi
[GLOBALS] \u003d\u003e Dizi
[GLOBALS] \u003d\u003e Dizi
* RECURSION *
[_POST] \u003d\u003e Dizi ()
[_GET] \u003d\u003e Dizi ()
[_COOKIE] \u003d\u003e Dizi ()
[_FILES] \u003d\u003e Dizi ()
)

[_POST] \u003d\u003e Dizi ()
[_GET] \u003d\u003e Dizi ()
[_COOKIE] \u003d\u003e Dizi ()
[_FILES] \u003d\u003e Dizi ()

)
?>

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

yazdır "

". htmlspecialchars (print_r (get_defined_vars (), doğru))."
" ;
yazdır "
". htmlspecialchars (print_r ($ _SERVER, doğru))."
" ;
?>

Ve sonra her iki listede $ _SERVER görünecektir. Sanırım bu gerçekten bir aldatma 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ünde
$ değişken \u003d get_defined_vars ();

// Şimdi işinizi yapın
$ foo \u003d "foo";
$ bar \u003d "bar";

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

eko "

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

15 yıl önce

İşte görüntüleme veya e-posta için bir hata ayıklama raporu oluşturan bir işlev
get_defined_vars kullanarak. Olmadan ayrıntılı bir anlık görüntü elde etmek için harika
kullanıcı girdisine güvenerek.

function generateDebugReport ($ yöntem, $ tanımlı_vars, $ e-posta \u003d "tanımsız") (
// Görüntülenecek veya e-postayla gönderilecek bir hata ayıklama raporu oluşturma işlevi.
// Kullanım: generateDebugReport (yöntem, get_defined_vars (), e-posta);
// Yöntem "tarayıcı" veya "e-posta" olduğunda.

// "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ı)
// Ayrıca güvenlik nedenleriyle göz ardı edilmesini istediğiniz değişkenleri de ekleyin - ör. PHPSESSID.
$ ignorelist \u003d array ("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ı \u003d tarih ("a / g / y s: d: s");
$ message \u003d "Hata ayıklama raporu oluşturuldu $ zaman damgası \\ n";

// İyi ölçü 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ı;
$ sql_error \u003d mysql_error ($ bağlantı);
eğer ($ sql_error) (
$ message. \u003d "\\ 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 olarak $ anahtar \u003d\u003e $ val) (
eğer (is_array ($ değer) &&! in_array ($ anahtar, $ yok sayma) && say ($ değer)\u003e 0) (
$ mesaj. \u003d "\\ n $ anahtar dizisi (anahtar \u003d değer): \\ n";
foreach ($ val as $ subkey \u003d\u003e $ subval) (
eğer (! in_array ($ subkey, $ ignorelist) &&! is_array ($ subval)) (
$ mesaj. \u003d $ alt anahtar. "\u003d". $ subval. "\\ n";
}
elseif (! in_array ($ subkey, $ ignorelist) && is_array ($ subval)) (
foreach ($ subval as $ subsubkey \u003d\u003e $ subsubval) (
eğer (! in_array ($ subsubkey, $ ignorelist)) (
$ mesaj. \u003d $ alt anahtar. "\u003d". $ subsubval. "\\ n" ;
}
}
}
}
}
elseif (!
is_array ($ değer) &&! in_array ($ key, $ ignorelist) && $ val) (
$ mesaj. \u003d "\\ nDeğişken". $ anahtar. "\u003d". $ val. "\\ n";
}
}

Eğer ($ yöntem \u003d\u003d "tarayıcı") (
echo nl2br ($ mesaj);
}
elseif ($ yöntem \u003d\u003d "e-posta") (
eğer ($ e-posta \u003d\u003d "tanımsız") (
$ e-posta \u003d $ _SERVER ["SERVER_ADMIN"];
}

$ mresult \u003d mail ($ email, "Hata Ayıklama Raporu". $ _ENV ["HOSTNAME"]. "", $ mesaj);
eğer ($ mresult \u003d\u003d 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

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

function obj2xml ($ v, $ girinti \u003d "") (
while (liste ($ anahtar, $ değer) \u003d her biri ($ v)) (
($ key \u003d\u003d "__attr") devam ederse;
// __attr olup olmadığını kontrol edin
eğer (is_object ($ değer -\u003e __attr)) (
while (liste ($ anahtar2, $ değer2) \u003d her biri ($ değer -\u003e __attr)) (
$ attr. \u003d "$ anahtar2 \u003d \\" $ değer2 \\ "";
}
}
başka $ attr \u003d "";
eğer (is_array ($ değer) || is_object ($ değer)) (
baskı ("$ girinti< $key$attr >\\ n ");
obj2xml ($ değer, $ girinti. "");
baskı ("$ girinti\\ n ");
}
else yazdır ("$ girinti< $key$attr > $ val\\ n ");
}
}

// Örnek nesne
$ x -\u003e ad -\u003e ilk \u003d "John";
$ x -\u003e isim -\u003e soy \u003d "Smith";
$ x -\u003e dizi ["Meyve"] \u003d "Bannana";
$ x -\u003e arr ["Sebze"] \u003d "Havuç";
$ y -\u003e müşteri \u003d $ x;
$ y -\u003e müşteri -\u003e __attr -\u003e id \u003d "176C4";

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


John
Smith


Bannana
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ımlayın
$ my_var \u003d "foo";

// tanımlı değişkenler listemizi alın
$ tanımlı_vars \u003d get_defined_vars ();

// şimdi döndürülen dizi aracılığıyla değeri değiştirmeyi deneyin
$ tanımlı_vars ["my_var"] \u003d "çubuk";

echo $ my_var, "\\ n";

?>

"foo" (orijinal değer) çıktı verir. Get_defined_vars () 'ın referans yapmak için isteğe bağlı bir argümanı olsaydı iyi olurdu, ancak bunun oldukça özel bir istek olduğunu düşünüyorum. Bunu kendiniz (daha az rahatlıkla) aşağıdaki gibi bir şeyle yapabilirsiniz:

$ tanımlı_vars \u003d dizi ();
$ var_names \u003d array_keys (get_defined_vars ());

foreach ($ var_names as $ var_name)
{
$ tanımlı_vars [$ var_name] \u003d & $ $ var_name;
}

?>

1 yıl önce

Burada daha önce get_defined_vars içinde "bu" olduğundan bahsetmiştim.

Görünüşe göre her zaman orada değil ama bazı durumlarda açıklanamaz bir şekilde ortaya çıkacak.

Php -r "
sınıf Testi (
public function a () (var_dump (array_keys (get_defined_vars ())); $ a \u003d 123;)
public function b () (var_dump (array_keys (get_defined_vars ())); $ this;)
}
$ t \u003d yeni Test ();
$ t-\u003e a ();
$ t-\u003e b ();
"

Dizi ()
dizi ("bu")

Bu PHP 7.2'de olmamakla birlikte PHP 5.6'da gerçekleşecektir.

1 yıl önce

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

Burada referansa dönüştüren önerileri önermem.

Genel işlev x ($ a, $ b, $ c) (
foreach (array_keys (get_defined_vars ()) $ anahtar olarak)
eğer ($ anahtar! \u003d\u003d "bu")
$ this-\u003e y ($ ($ anahtar));
}

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

$ () Yerine $$ da kullanabilirsiniz.

Son derece genel kod yapmak için zamanımda bazı saçma şeyler yaptım ama hiçbir zaman yukarıdaki gibi bir şey yapmak zorunda kalmadım. Çalışmayabilir bile (ama $ a [$ key] 'den farklı olmadığı için olmalı).

Ayrıca $$ key ++ 'ı da yapabilirsiniz, ancak korkunç derecede kötü olmayan bir kod görmedim (dinamiğin yararlı olmadığı dinamikleri kullanmak).

Eğer böyle bir şey yapıyorsanız, o zaman ek bir inceleme yapın.

Elbette evde bir gardırobunuz veya çekmeceniz var. Kullanım ilkesi basit: şu anda ihtiyacımız olmayan, ancak bir süre sonra ihtiyaç duyulabilecek şeyleri oraya koyuyoruz.

Değişkenler aynı şekilde çalışır. Onlara bir değer katabilir ve ihtiyacınız olana kadar orada saklayabilirsiniz.

Değişkenler Yaratmak

Bir değişkene aşağıdaki gibi bir değer girebilirsiniz:

Yukarıdaki kodda $ name değişkenini oluşturduk ve içine Ivan'ın değerini koyduk, sonra $ age değişkenini oluşturduk ve ona 20 değerini atadık.

"Değişken" adı, değerinin komut dosyası yürütülürken değişebileceği anlamına gelir:

Bazı dillerde, bir değişken önce "bildirilmeli" ve sonra kullanılmalıdır. PHP'de bildirim yoktur - değişkene bir değer koyduğunuz anda bir değişken oluşturulur.
Bununla birlikte, PHP programcıları genellikle "değişken oluştur" yerine "değişken bildir" derler.

Ayrıca, "değişkene bir değer koymak" yerine genellikle "bir değer ata" derler.
Nedeni basittir - bir değişkende bir değer sakladığımız için \u003d sembolüne "atama operatörü" denir. Dolayısıyla "uygun" terimi.

Değişken adlandırma kuralları

1. Değişken adı $ sembolüyle başlar.

2. İkinci karakter bir harf veya alt çizgi olabilir _

Değişken isimleri büyük / küçük harfe duyarlıdır. $ name ve $ Name farklı değişkenlerdir.

Ekranda bir değişkenin değerini görüntüleme

Zaten bildiğimiz echo komutunu kullanarak bir değişkeni görüntüleyebilirsiniz:

Echo komutu, aynı anda birden çok değeri görüntülemenizi sağlar:

Echo'ya virgülle ayrılmış 2 değer aktardığımızı unutmayın. Böylece istediğimiz kadar değeri aktarabiliriz. Aşağıdaki iki örnek aynı sonucu verecektir:

Ayrıca PHP'de değişkenlerin çıktısını almak için bir kısa sözdizimi vardır. Yerine

PHP 5.4'ten önce, steno sözdizimi yalnızca short_open_tag yönergesi PHP ayarlarında etkinleştirildiğinde çalışıyordu, bu da steno açma etiketinin kullanımına izin veriyor

Bir değişkenin değerini kontrol etmek

Echo komutu, bir değişkenin mevcut değerini kontrol etmek için her zaman uygun değildir. Örneğin, boş bir dizeyi görüntülemeye çalışırsanız, ekranda "" hiçbir şey görüntülenmez. Ve nedeninin ne olduğu açık değil - boş bir değişken veya çalışmayan bir kod.

Bu nedenle, var_dump () işlevi bir değişkenin değerini kontrol etmek için kullanılır:

Komut dosyasının çalıştırılmasının sonucu:

Dize (5) "Vasya" dizesi (0) ""

Gördüğünüz gibi, PHP sadece değişkenin içeriğini değil, aynı zamanda karakter sayısını ve hatta değişkenin (dize) türünü de gösteriyordu. Sonraki derslerde veri türlerine daha yakından bakacağız.

Değişkenleri Silme

Unset () işlevini kullanarak mevcut bir değişkeni silebilirsiniz:

Şimdi biraz pratik yapma zamanı.

Unutmayın, hemen hemen her PHP görevinin birden çok çözümü olabilir. Bu nedenle, kararlarınız bu sitede yazılanlardan farklıysa, bu kesinlikle yanlış bir şey yaptığınız anlamına gelmez.

Şunları sağlayan bir komut dosyası yazın:
1. Başlıkları, içeriği ve bazı değerleri olan değişkenler oluşturur.
2. h1 etiketi içindeki title değişkeninin değerini ve div etiketi içindeki içerik değişkeninin değerini verir.

Çözümü göster

", $ başlık""; Eko"

", $ içerik"
"; ?>

Bu kararın tek doğru karar olmadığını bir kez daha dikkatinizi çekmek isterim. Örneğin, aşağıdaki kod aynı sonucu verecektir:

Bu ders PHP değişkenlerinin kapsamını inceler. Yerel ve genel kapsamlar arasındaki farkı açıklar, bir işlev içindeki genel 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 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 dilleriyle karşılaştırıldığında).

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 kodun herhangi bir yerinden erişilebilir
  • Yerel - değişkenlere yalnızca tanımlandıkları işlevin içinden erişilebilir

Değişken kapsam ve özellikle yerel kapsam, kod yönetimini büyük ölçüde kolaylaştırır. Tüm değişkenler global ise, komut dosyasının herhangi bir yerinde değiştirilebilirler. Bu, kaosa ve büyük betiklere yol açar, çünkü betiğin farklı bölümleri çoğu zaman aynı ada sahip değişkenler kullanır. 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ıklaması daha kolay hale getirirsiniz.

Genel kapsamı genel olan değişkenlere genel, yerel kapsamı olan değişkenlere yerel 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:

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

Değişken ve işlevi oluşturduktan sonra, komut dosyası sayHello () 'yu çağırır ve bu da "Merhaba Harry!" ... Komut dosyası daha sonra echo işlevini kullanarak iki değişkenin değerlerini yazdırmaya çalışır. İşte neler oluyor:

  • Çünkü $ globalName işlevin dışında oluşturulmuşsa, komut dosyasının herhangi bir yerinde kullanılabilir, bu nedenle "Zoe" görüntülenir.
  • $ localName yalnızca sayHello () işlevi içinde kullanılabilir olacaktır. Yankı ifadesi işlevin dışında olduğundan, PHP yerel değişkene erişime izin vermez. Bunun yerine, PHP kodun $ localName adında yeni bir değişken oluşturacağını ve boş bir dizenin varsayılan değerini alacağını varsayar. bu nedenle ikinci yankı çağrısı $ localName değişkeni için "" değerini verir.

Bir işlevin içindeki global değişkenlere erişim

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ç işlev, önce global anahtar sözcüğü kullanarak değişkeni işlevde global olarak tanımlamalısınız:

İş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.

İşte bir fonksiyonun içinde global bir değişken kullanan örnek bir komut dosyası:

"; global $ globalName; echo" Merhaba $ globalName!
";) sayHello ();?\u003e

Çalıştırıldığında, komut dosyası çıktı:

Selam Harry! Merhaba Zoya!

SayHello () işlevi, $ globalName değişkenini global olarak bildirmek için global anahtar sözcüğü kullanır. Daha sonra değişkene erişebilir ve değerini görüntüleyebilir ("Zoe").

Süper küresel nedir?

PHP, çeşitli bilgileri içeren önceden tanımlanmış özel bir küresel dizi kümesine sahiptir. Bu tür diziler denir süper küreseller iç işlev alanı da dahil olmak üzere komut dosyasının herhangi bir yerinden erişilebilir olduklarından ve global anahtar sözcük kullanılarak tanımlanmaları gerekmediğinden.

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

  • $ GLOBALS - koddaki tüm genel değişkenlerin listesi (süper küreseller hariç)
  • $ _GET - Tarayıcı tarafından bir GET isteği kullanılarak 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 listesini içerir
  • $ _COOKIE - tarayıcı tarafından gönderilen tüm tanımlama bilgilerinin 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 - mevcut tarayıcı için oturum değişkenlerini saklamanıza ve kullanmanıza olanak sağlar
  • $ _SERVER - çalıştırılan komut dizisinin dosya adı ve tarayıcının IP adresi gibi sunucu hakkında bilgi 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 için $ _GET kullanabilir ve bunları sayfada görüntüleyebilirsiniz:

Yukarıdaki komut dosyasını http://www.example.com/script.php?yourName\u003dFred URL dizesiyle çalıştırırsanız, çıktı:

Merhaba Fred!

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

$ GLOBALS süper küreselinin kullanımı çok uygundur çünkü global anahtar sözcüğe ihtiyaç duymadan bir fonksiyondaki global değişkenlere erişimi düzenlemenize izin verir. Örneğin:

";) sayHello (); //" Merhaba, Zoe! "yazdırır?\u003e

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

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

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

Ancak, işlev çağrıları arasında 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 işlevde statik bir değişken oluşturmak için, değişken adından önce static anahtar sözcüğünü kullanmalı ve ona bir başlangıç \u200b\u200bdeğeri ayarladığınızdan emin olmalısınız. Örneğin:

İşlev myFunction () (statik $ myVariable \u003d 0;)

Statik 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österen bir işlev oluşturuyorsunuz. Yerel bir değişken kullanarak şu şekilde kod yazmayı deneyebilirsiniz:


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

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

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

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

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

Şimdi komut dosyası beklenen çıktıyı üretecek:

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

Statik bir değişken, işlev çağrıları arasında değerini korusa da, yalnızca komut dosyası çalıştırıldığında geçerlidir. Komut dosyası yürütmeyi bitirir bitirmez, tüm statik değişkenler ve ayrıca yerel ve global değişkenler yok edilir.

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