internet pencereler Android
Genişletmek

PHP tırnak, single, çift, ekranlama tırnak. PHP'de tek ve çift tırnak arasındaki fark nedir? PHP'de çift tırnak

Dize bir karakter kümesidir. PHP'de, sembol baytla aynıdır, bu tam olarak 256 farklı karakter olabileceği anlamına gelir. Ayrıca, PHP'nin Unicode için yerleşik bir desteğe sahip olmadığı anlamına gelir "a. Bazı Unicode Desteği" A, UTF8_ENCODE () ve UTF8_DECODE () işlevlerini sağlar.

Not: Dize çok yüksekse sorun yoktur. PHP tarafından uygulanan çizgilerin boyutunda pratik olarak herhangi bir kısıtlama yoktur, bu nedenle uzunlukları için endişelenmeniz için kesinlikle hiçbir neden yoktur.

Sözdizimi

    Dize üç farklı şekilde belirlenebilir.

Tek tırnak

Dizeyi belirlemenin en basit yolu, tek tırnak (sembol "olarak sonuçlandırmaktır.

Çizginin içindeki tek bir tırnak kullanılması, diğer birçok dilde olduğu gibi, ters tırpanın (\\) 'nin bir sembolüyle öngörülmesi gerekir. Ters Batan lanet olası tek bir tortudan önce gitmeli veya çizginin sonunduysa, çoğaltmanız gerekir. Lütfen başka bir karakteri korumaya çalışırsanız, ters lavabo özelliği de yazdırılacağını unutmayın! Bu nedenle, bir kural olarak, ters eğik çizgiyi korumaya gerek yoktur.

Not: PHP 3'te, bu durumda, E_notice seviye mesajı verilecektir.

Not: Tek alıntılarda bulunan satırlarda karşılaşılan özel karakterler için diğer iki sözdizimin, değişkenler ve ekranlama sekansları işlenmez.

Echo "bu basit bir dize"; Echo ", yeni bir çizginin sembolünü normal olduğu için de ekleyebilirsiniz"; // Dışarı çıkacak: Arnold dedi ki: "Arnold dedi ki," Echo "i geri döneceğim:" Geri döneceğim ""; // Kaldır: C: \\ *. *? Echo "Siz C: \\\\ *. *?"; // Kaldır: C: \\ *. *? Echo "C: \\ *. *?"; // Out: eklenmez: \\ n Yeni çizgi yankı "eklenmez: \\ n yeni dizge"; // DOĞRU: $ Expand Değişkenleri ayrıca, echo ile ikame edilmedi "$ 'lık değişkenler de ikame edilmedi";

İkili alıntı

Dize çift tırnak içine alınmışsa ("), PHP özel karakterler için daha fazla sayıda kontrol dizisi tanır:

Tablo 11-1. Kontrol dizileri

Başka bir karakteri çarpmak istiyorsanız tekrar ediyoruz, ters lavabo özelliği de yazdırılacak!

Ancak, çift tırnakdaki satırların en önemli özelliği değişkenlerin işlenmesidir. Daha fazla bilgi: Satır işleme.

Heredoc.

Dizeleri tanımlamanın bir başka yolu, heredoc-sözdiziminin (") kullanımıdır.

Kapanış tanımlayıcısı, dizenin ilk sütununda başlamalıdır. Ek olarak, tanımlayıcı, PHP'deki diğer tüm etiketler gibi aynı isimlendirme kurallarına karşılık gelmelidir: sadece alfanümerik karakterler ve alt çizgi işareti içerir ve merpure veya alt çizelgelerle başlamalıdır.

Dikkat

Kapama tanımlayıcısına sahip dizenin, muhtemelen noktalı virgüller (;) hariç diğer karakterleri içermediğini not etmek çok önemlidir. Bu, tanımlayıcının bir girinti ile girilmemesi gerektiği ve bir noktalı virgülden önce veya sonra sekmenin boşlukları veya sekmesi olamayacağı anlamına gelir. Kapatma tanımlayıcısının önündeki ilk karakterin, işletim sisteminizde tanımlanan yeni bir dizgenin bir sembolü olması gerektiğini anlamak da önemlidir. Örneğin, Macintosh'ta.

Bu kural kırılırsa ve kapanma tanımlayıcısı "saf" değilse, kapatma tanımlayıcısının eksik olduğu ve PHP'nin aramaya devam edeceğine inanılmaktadır. Bu durumda doğru kapanma tanımlayıcısı bulunmazsa, komut dosyasının sonundaki bir dize numarası ile işlemede bir hataya neden olur.

Heredoc-metni, onlara sahip olmasa da, çift tırnak içinde satırla aynı şekilde davranır. Bu, HEREDOC'taki alıntıları terk etmeniz gerekmediği anlamına gelir, ancak yine de yukarıdaki kontrol dizilerini kullanabilirsiniz. Değişkenler işlenir, ancak Heredoc içindeki karmaşık değişkenler kullanmak, satırlarla çalışırken olduğu gibi özen göstermelidir.

Örnek 11-2. Heredoc dize tanımı örneği

$ Str \u003d.<<foo \u003d "foo"; $ this-\u003e bar \u003d dizi ("bar1", "bar2", "bar3"); ) $ foo \u003d yeni foo (); $ isim \u003d "maden"; Eko.<<foo. Şimdi ($ foo-\u003e bar) getiriyorum. Bu, "a": \\ x41 eot harfini vermelidir;

Not: Heredoc desteği PHP 4'e eklendi.

Değişkenlerin işlenmesi

Dize çift tırnak içinde veya heredoc ile tanımlanırsa, içindeki değişkenler işlenir.

İki tür sözdizimi vardır: basit ve karmaşık. Basit sözdizimi daha kolay ve kullanışlıdır. Değişken işleme, dizinin (dizi) veya nesne özelliklerinin (nesne) değerini sağlar.

Kompleks sözdizimi PHP 4'e getirildi ve ekspresyonu çevreleyen kıvırcık parantez üzerinde tanınabilir.

Basit sözdizimi

Tercüman dolar işareti ($) karşılıyorsa, doğru değişken adını oluşturmak için mümkün olduğunca birçok karakter yakalar. İsminin sonunu doğru bir şekilde tanımlamak istiyorsanız, kıvırcık parantez içinde bir değişken adı sonlandırın.

$ bira \u003d "heineken"; Echo "$ bira" ın tadı harika "; // çalışır," "" Bu, "bu yankı adı için yanlış bir karakterdir" değişken; // işe yaramaz, "s", yankı değişkeni adı için sadık bir karakterdir ", bazı $ (bira) s"; // echo "Bazı ($ bira) s" içti; // İşler

Bir dizi öğesi (dizi) veya nesne özelliği (nesne) de işlenebilir. Dizi dizinlerinde, kapanış kare braketi (]), endeksin tanımının sonunu belirtir. Nesnenin özellikleri için, aynı kurallar basit değişkenler için geçerlidir, ancak değişkenlerde olduğu gibi hile imkansızdır.

// Bu örnekler, // satırlarının içindeki dizilerin kullanımı ile ilgilidir. Satırların dışında, her zaman dize tuşlarınızı // dizinizi tırnak içine girin ve dış dizeleri (parantez) kullanmayın. // Herkes Hataları Göster ERROR_REPORTING (E_ALL); $ Fruits \u003d dizi ("çilek" \u003d\u003e "kırmızı", "muz" \u003d\u003e "sarı"); // çalışır, ancak çizginin alıntılarının dışarısı başka bir yankı "bir muzlu" olarak çalıştığını fark edin. // echo "Bir muz ($ meyveler [" muz "])."; // çalışır, ancak PHP, aşağıda açıklandığı gibi, ilk aramalar // Constant Muz. Yankı "Bir muz ($ meyve)."; // çalışmaz, kıvırcık parantez kullanın. Bu bir işlem hatasına neden olur. Yankı "Bir muz $ meyvelerdir [" muz "]."; // echo "Bir muz" çalışıyor. $ Meyveler ["muz"]. "."; // Echo'yu çalıştırmak "Bu kare $ kare-\u003e genişlik sayaçları geniştir."; // Çalışmıyor. Çözüm için, bkz. Karmaşık Sözdizimi. Echo "Bu kare $ kare-\u003e width00 santimetre geniştir.";

Daha zor bir şey için, karmaşık sözdizimi kullanmanız gerekir.

Karmaşık (figürlü) sözdizimi

Zor olarak adlandırılır, çünkü anlamada zordur, ancak karmaşık ifadeler kullanmanıza izin verir.

Aslında, bu sözdizimiyle dizideki adın adındaki herhangi bir değeri etkinleştirebilirsiniz. Sadece ifadeyi, çizginin dışındakiyle aynı şekilde yazarsınız ve sonra (ve) olarak sonuçlandırın. Kalkanı yapamadığınız için "("), bu sözdizimi sadece $ 'ya için doğrudan olması gerektiğinde tanınır (. ("(\\ $" Veya "($" kullanmak "($"). Birkaç açıklayıcı örnekler:

// Herkes Hataları Göster ERROR_REPORTING (E_ALL); $ Great \u003d "fantastik"; // çalışmaz, kaldırır: bu (fantastik) yankı "Bu ($ harika)"; // çalışır, Çekme: Bu fantastik yankı "Bu ($ harika)"; Echo "bu $ (harika)"; // echo "Bu Genişlik Meydanı ($-\u003e Genişlik) 00 santimetresini çalıştırır."; // echo "Çalışır: ($ arr)"; // $ foo yanlış // satır olarak aynı sebeple yanlıştır. Başka bir deyişle, hala çalışacak, // fakat PHP ilk önce bir foo sabitini aradığından, // e_notice seviye hatası (belirsiz sabit) diyecektir. Yankı "Yanlış: ($ arr)"; // İşler. Çok boyutlu diziler kullanırken, // satırları her zaman yankı kıvırcık parantezlerini kullanırken "çalışır: ($ arr [" foo "])"; // İşler. Echo "çalışıyor:". $ arr ["foo"]; Echo "Hatta yazabilirsiniz ($ obj-\u003e Değerler-\u003e Name)"; Yankı "Bu, bir değişkenin değeridir, ($ ($ adı))";

Dizgedeki sembole ve değişimine erişim

Çizgilerdeki semboller, dizgenin başlangıcına göre, sıfırdan başlayarak kıvırcık parantez içinde sıfırdan başlayarak, dizinin başlangıcına göre ayarlanarak kullanılabilir ve değiştirilebilir.

Not: Geri uyumluluğu sağlamak için, aynı hedefler için dizi braketini kullanma yeteneğine sahipsiniz. Ancak, PHP 4 ile başlayarak, bu sözdizimi kullanmak için istenmez.

Örnek 11-3. Çeşitli dize örnekleri

// ilk satır karakterinin alınması $ str \u003d "Bu bir testtir."; $ ilk \u003d $ str (0); // üçüncü karakter hattını elde etmek $ üçüncü \u003d $ str (2); // $ str dizinin son karakterini elde etme \u003d "Hala bir test."; $ Son \u003d $ str (Strlen ($ str) -1); // satırın son sembolünün değiştirilmesi $ str \u003d "Denize bak"; $ Str (Strlen ($ str) -1) \u003d "I";

Faydalı Özellikler ve Operatörler

Satırlar operatör ile birleştirilebilir. "." (nokta). Lütfen "+" ekleme operatörü burada çalışmıyor. Daha fazla bilgi için, bkz. Dize Operatörleri.

Dizeleri değiştirmek için birçok faydalı özellik vardır.

Ana fonksiyonlar, ileri arama ve değiştirme için düzenli ifadelerin işlevleri, (iki bölümde: Perl ve Posix Advanced) düzenli ifadelerin işlevleri bölümünde açıklanmaktadır.

URL dizeleri için de işlevler vardır ve şifreleme / şifre çözme dizeleri (Mcrypt ve MHASh) işlevleri vardır.

Son olarak, yine de aradığınızı bulamadıysanız, bkz. Sembolik tip için işlevler.

Dize dönüştür

Dize (string) veya strval () işlevini kullanarak bir değeri bir dize dönüştürebilirsiniz. Dizenin gerekli olduğu ifadelerde, dönüşüm otomatik olarak gerçekleşir. Bu, ECHO () veya Print () işlevlerini kullandığınızda veya bir değişkenin değerini bir dize ile karşılaştırırken olur. Türlerin türlerinin ve manipülasyonlarının bölümlerini okumak, aşağıdakileri daha anlaşılabilir hale getirecektir. Ayrıca bkz. Settype ().

Boolean (Boolean) Gerçek değeri "1" dizesine dönüştürülür ve yanlışın değeri "" (boş dize) olarak gösterilir. Bu sayede değerleri her iki yönde de dönüştürebilirsiniz - Boolean tipinden bir dize ve tam tersi.

Bir tamsayı (tam sayı) veya kayan nokta numarası (şamandıra), sayılarından oluşan sayı ile temsil edilen bir dizeye dönüştürülür (yüzer bir nokta numaraları için derecenin bir göstergesi dahil).

Diziler her zaman "dizi" dizesine dönüştürülür, böylece ne içerdiğini bulmak için dizi ()) veya yazdırma () kullanarak (dizinin) içeriğini görüntüleyemezsiniz. Bir öğeyi görüntülemek için, bir yankı $ arr ["foo"] gibi bir şey yapmanız gerekir. Tüm içeriği nasıl gösterilir / görüntüleme ile ilgili aşağıdaki ipuçlarına bakın.

Nesneler her zaman "nesne" dizesine dönüştürülür. Hata ayıklamak için nesnenin (nesne) nesne üyesinin değerini görüntülemek istiyorsanız, aşağıdaki paragrafları okuyun. İstediğiniz nesnenin sınıfının adını almak istiyorsanız, GET_CLASS () kullanın.

Kaynaklar her zaman "Kaynak Kimliği # 1" yapısı olan "Kaynak Kimliği # 1" yapısına dönüştürülür, burada 1, yürütme sırasında PHP'de atanan benzersiz bir kaynak numarası (kaynak). Bir kaynak türü almak istiyorsanız, kullanın.

NULL her zaman boş bir dizeye dönüştürülür.

Yukarıda görebileceğiniz gibi, dizilerin, nesnelerin veya kaynakların çıktısı, değerler hakkında herhangi bir faydalı bilgi sağlamaz. Hata ayıklama için değerleri görüntülemek için daha uygun bir yol, Print_r () ve var_dump () işlevlerini kullanmaktır.

Ayrıca PHP değerlerini sabit depolama için dizeleri dönüştürebilirsiniz. Bu yöntemin serileştirme denir ve serialize () işlevi kullanılarak gerçekleştirilebilir. Ek olarak, PHP ayarınızda bir WDDX desteğiniz varsa, PHP değerlerini XML yapısında seri hale getirebilirsiniz.

Sayılarla satır dönüşümü

Dize sayısal bir değer olarak tanınırsa, ortaya çıkan değer ve tip aşağıda gösterildiği gibi tanımlanır.

Dize, karakterlerden herhangi birini içeriyorsa şamandıra olarak tanınacaktır. "," E "veya" E ". Aksi takdirde, bir bütün olarak tanımlanacaktır.

Değer, çizginin ilk kısmı ile belirlenir. Dize doğru bir sayısal değerle başlarsa, bu değer kullanılacaktır. Aksi takdirde, değer 0 (sıfır) olacaktır. Serterik bir sayısal değer, sunulan işaretin talebi üzerine, ardından isteğe bağlı bir gösterge, ardından bir veya daha fazla rakamdır (ondalık bir nokta içerebilir). Derecesi göstergesi, bir veya daha fazla sayıdan sonra "E" veya "E" dir.

$ Foo \u003d 1 + "10.5"; // $ foo float (11.5) $ foo \u003d 1 + "-1.3E3"; // $ foo float (-1299) $ foo \u003d 1 + "bob-1.3e3"; // $ foo bir tamsayıdır (1) $ foo \u003d 1 + "bob3"; // $ foo bir tamsayıdır (1) $ foo \u003d 1 + "10 küçük domuz"; // $ foo tamsayıdır (11) $ foo \u003d 4 + "10.2 Küçük Piggies"; // $ foo float (14.2) $ foo \u003d "10.0 domuz" + 1; // $ foo float (11) $ foo \u003d "10.0 domuz" + 1.0; // $ foo float (11)

Bu dönüşüm hakkında daha fazla bilgi için, bkz. UNIX Strtod (3) Dokümantasyon bölümüne bakın.

Bu bölümün örneklerinden herhangi birini test etmek istiyorsanız, ne olacağını görmek için bir sonraki satırı kopyalayabilir ve yapıştırabilirsiniz:

Echo "\\ $ foo \u003d\u003d $ foo; tür:". GetType ($ foo). "
\\ n ";

Bir tamsayı dönüştürerek (örneğin, C'de yapabileceğiniz gibi) bir sembol kodu almayı beklemeyin. Karakterleri kodlarına ve arkasına dönüştürmek için ord () ve

PHP'de programlama konusunda uzman değilim, ama beni biraz karıştırıyorum, neden PHP'de bir dize ile birikimi tek başına ve bazen çift tırnak içinde görüyorum.

Tek alıntılardaysa, bu V.NET veya C dilini biliyorum, bu, bunun bir dizge değil, bir sembol olduğu anlamına gelir.

Karar

Ne bilmek istiyorsun

$ a \u003d "isim"; $ B \u003d "$ a"; \u003d\u003d "Adım" $ C \u003d "$ a"; ! \u003d "Adımım"

PHP'de, insanlar bir sabit dize belirlemek için tek tırnak kullanırlar, örneğin "A", "Adı", "Abc XYZ", "A $ B $ C $ D gibi bir tanımlayıcı içeren bir dize belirlemek için çift tırnak kullanırken, ",

Bir şey daha,

"Adımım" eko;

daha hızlı

"Adımım" eko;

Yankı "benim". $ A;

daha yavaş

Echo "$ a";

Bu, kullanılan diğer satırlar için geçerlidir.

PHP'de, tek tırnakdaki metin bir dize değeri olarak kabul edilir ve çift alıntılardaki metin, değerlerini değiştirerek ve işleme yoluyla değişkenleri analiz edecektir.

$ Test \u003d "Değişken"; Echo "Hello MR $ Test"; // Çıktı olacaktır: Merhaba Bay Değişken Echo "Hello MR $ Test"; // Çıktı olacaktır: Merhaba MR $ Test

Burada, çift tırnak değeri analiz ediyor ve tek bir teklif bir dize değeri olarak kabul edilir (bir $ test değişkenini ayrıştırmadan.)

Her iki iç içe karakter türü de satırdır. Bir tür teklif, başka bir teklif türünün sonuçları için kullanımı uygundur. "" "Ve ayrıca" ", tırnak türleri arasındaki en büyük fark, iç içe geçmiş tanımlayıcılara referansların çift tırnak içinde değiştirilmesi ve tek alıntıların içinde değil.

Yorum Yap: PHP 7.0.0'da 64 bit platformlarda, dize uzunlukları için, 32 bit sistemlerde ve daha önceki PHP sürümlerinde elde edilebilecek sınır kısıtlamaları yoktur, çizgiler 2 GB'den (2147483647 bayt) daha fazla olamaz.

Sözdizimi

Dize dört farklı şekilde belirlenebilir:

  • Tek tırnak
  • İkili alıntı
  • NowDoc Sözdizimi (PHP 5.3.0 ile başlayarak)

Tek tırnak

Bir dizeyi tanımlamanın en basit yolu, tek tırnak içine alınmasıdır (sembol " ).

Dize içindeki tek tırnakları kullanmak için, ters bir katmanla ( \ ). Ters yatma yazmanız gerekiyorsa, çoğaltın ( \\ ). Ters katmanın uygulanmasının diğer tüm durumları, geleneksel semboller olarak yorumlanacaktır: Bu, diğer kontrol dizilerini kullanmaya çalışırsanız, \\ R. veya \\ N.Özel bir davranış yerine olduğu gibi türetilecekler.

eko. "Bu basit bir dize";

eko. "Ayrıca dizeleri de ekleyebilirsiniz.
böyle yeni çizginin sembolü
bu normal"
;

// ekranlar: Arnold dedi ki: "Geri döneceğim"
eko. "Bir zamanlar Arnold dedi ki:" Ben geri döneceğim "";

Eko. "C: \\\\ *. *?";

// ekranlar: C: \\ *. *?
echo "C: \\ *. *?" ;

// ekranlar: konuşlandırılmayacak: \\ n Yeni satır
eko. "Dağıtılmayacak: \\ n Yeni String";

// Ekranlar: Değişkenler $ Genişletin de $ Ya Açılmıyor
eko. "$ Değişkenleri genişletin de $ açılmıyorsunuz";
?>

İkili alıntı

Dize çift tırnak içine alınmışsa ("), PHP özel karakterlerin aşağıdaki kontrol dizilerini tanır:

Kontrol dizileri
Sıra Değer vermek
\\ N. yeni çizgi (ASCII'de LF veya 0x0A (10))
\\ R. İade Taşıma (CR veya 0x0D (13) ASCII)
\\ T yatay sekmesi (HT veya 0x09 (9) ASCII)
\\ V. dikey sekmesi (ASCII içerisinde vt veya 0x0b (11)) (PHP 5.2.5 ile)
\\ E. kaçış işareti (ESC veya 0x1B (27)) (PHP 5.4.4) ile
\\ F. sayfa Feed (ASCII'de FF veya 0x0C (12)) (PHP 5.2.5 ile)
\\ ters eğik lanet
\$ dolar işareti
\" İkili alıntı
\{1,3} Senin sembolün düzenli olarak ekspresyonuna karşılık gelen sembollerin sekansı, Sessizce bytes (yani "\\ 400" \u003d\u003d\u003d "\\ 000")
\\ x (1,2) Sembolün düzenli ifadesine karşılık gelen karakterlerin sırası onaltılık bir sayı sisteminde
\\ U (+) UTF-8 görünümündeki dizede görüntülenen Unicode sembolünün normal ekspresyonuna karşılık gelen karakterlerin sırası (PHP 7.0.0'a eklenir)

Tek tırnak içinde sonuçlanan bir dizgede olduğu gibi, herhangi bir karakterin taranması da tarama sembolünün kendisini görüntüleyecektir. PHP 5.1.1'e kadar, ters yat \\ ($ var) Yazdırılmadı.

Heredoc.

Dizeleri tanımlamanın üçüncü yolu, heredoc-sözdiziminin kullanımıdır: <<< . Bu operatörden sonra, tanımlayıcıyı, ardından satır çevirisini belirtmelisiniz. Bundan sonra, dizenin kendisi gider ve ardından eki kapatan aynı tanımlayıcı.

Hat meli Bir kapanış tanımlayıcısı ile başlayın, yani. İlk satır sütununda durmalıdır. Ek olarak, tanımlayıcı, PHP'deki diğer tüm etiketler olarak aynı isimlendirme kurallarına uymalıdır: sadece alfasayısal karakterler ve alt çizgi işareti içerir ve sayılarla başlamamalıdır (alt çizgi izin verilir).

Dikkat

Kapanış tanımlayıcısına sahip satırın, noktalı virgül dışında başka karakterleri içermemesi için çok önemlidir ( ; ). Bu, tanımlayıcının olduğu anlamına gelir girinti ile tanıtılmamalıdır Ve bir virgülle bir noktadan önce veya sonra sekmelerin boşlukları veya sekmeleri olamaz. Kapatma tanımlayıcısının önündeki ilk karakterin, işletim sisteminizde tanımlanan yeni bir dizgenin bir sembolü olması gerektiğini anlamak da önemlidir. Örneğin, Unix sistemlerinde, MacOS dahil, bu \\ N.. Kapanış tanımlayıcısından sonra, yeni bir çizgi de hemen başlamalıdır.

Bu kural kırılırsa ve kapanma tanımlayıcısı "saf" değilse, kapatma tanımlayıcısının eksik olduğu ve PHP'nin aramaya devam edeceğine inanılmaktadır. Bu durumda doğru kapanma tanımlayıcısı bulunmazsa, komut dosyasının sonunda bir dize numarası olan ayrıştırma hatasına neden olur.

Örnek # 1 Yanlış sözdizimi örneği

sınıf foo (
Kamu $ bar \u003d<<bar.
Eot;
// kapanış tanımlayıcısı kabul edilemez önce
}
?>

Örnek # 2 Doğru sözdiziminin örneği

sınıf foo (
Kamu $ bar \u003d<<bar.
Eot;
}
?>

Heredoc, sınıf alanlarını başlatmak için kullanılamaz. PHP 5.3 ile başlayarak, bu kısıtlama sadece kendi içinde değişken içeren heredoc için geçerlidir.

Heredoc-metni, onlara sahip olmasa da, çift tırnak içinde satırla aynı şekilde davranır. Bu, HEREDOC'taki alıntıları terk etmeniz gerekmediği anlamına gelir, ancak yine de yukarıdaki kontrol dizilerini kullanabilirsiniz. Değişkenler işlenir, ancak Heredoc içindeki karmaşık değişkenler kullanmak, satırlarla çalışırken olduğu gibi özen göstermelidir.

Örnek # 3 Tanım örneği

$ Str \u003d.<<Örnek dize,
birkaç satırı kapsayan
heredoc sözdizimini kullanarak.
EOD;

Foo sınıfı.
{
Var $ foo;
Var $ bar;

İşlev __Construct ()
{
$ Bu -\u003e foo \u003d "foo";
$ Bu -\u003e
}
}

$ foo \u003d new foo ();
$ İsim \u003d "İsim";

eko.<<Benim adım "$ isim". $ Foo yazarım -\u003e foo .
Şimdi çıkarıyorum
($ Foo -\u003e Bar [1]) .
Bu, "A" başlık harfini kaldırmalı: \\ x41
Eot;
?>

Benim adım "isim". Foo yazdırırım. Şimdi, BAR2'yi yerinden ettim. Bu "A" başlık harfini kaldırmalı: a

Fonksiyon argümanları aracılığıyla veri iletimi için Heredoc sözdizimini kullanmak da mümkündür:

5.3.0 sürümünden başlayarak, HEREDOC sözdizimini kullanarak sınıfın statik değişkenlerini ve özelliklerini / sabitlerini dahil etmek mümkün hale geldi:

Örnek # 5 Statik Değişken İnsidansı İçin Heredoc Kullanımı

// statik değişkenler
foo Foo ()
{
Statik $ bar \u003d<<Burada hiçbir şey yok ...
Etiket;
}

// Sabitler / Sınıf Özellikleri
foo sınıfı.
{
Const BAR \u003d.<<Sabit kullanma örneği
Foobar;

Public $ Baz \u003d<<Alanı kullanma örneği
Foobar;
}
?>

PHP 5.3.0 ile başlayarak, HEREDOC tanımlayıcısını çift tırnak ile çevreleyebilirsiniz:

Nowdoc.

NOWDOC, çift tırnak içinde çizgiler için tek tırnakdaki dizeler için aynıdır. Nowdoc heredoc'a benziyor, ama içinde değiştirme yerine geçilmez. Bu tasarım, bir PHP kodunun veya korunmasına ihtiyaç duymadan diğer büyük metin bloklarının tanıtılması için idealdir. Bunda, SGML tasarımı gibi biraz İşleme amaçlı olmayan metin bloğunu ilan eden gerçek.

NowDoc aynı diziyi gösterir <<< Bu, heredoc'da kullanılır, ancak daha sonra bunu takip eden tanımlayıcı, örneğin, <<<"EOT" . Heredoc tanımlayıcıları için çalışan tüm koşullar, özellikle de kapanan tanımlayıcıya ait olanlar için de geçerlidir.

Örnek # 7 NowDoc kullanmanın bir örneği

eko.<<<"EOD"
Metin örneği
birkaç çizgiyi işgal etmek
nowDoc sözdizimini kullanarak. Ters karıştırma her zaman tam anlamıyla işlenir,
Örneğin, \\\\ ve \\ ".
EOD;

Bu örneğin sonucu:

NowDoc sözdizimini kullanarak birkaç satırı işgal eden bir metnin örneği. Ters vuruşlar her zaman tam anlamıyla işlenir, örneğin, \\\\ ve \\ ".

Örnek # 8 Nowdoc Dize Edilen Örnek Değişkenlerle Örnek

/ * Değişkenlerle daha karmaşık bir örnek. * /
foo sınıfı.
{
Halka açık $ foo;
Kamu $ bar;

İşlev __Construct ()
{
$ Bu -\u003e foo \u003d "foo";
$ Bu -\u003e Bar \u003d dizi ("Bar1", "Bar2", "Bar3");
}
}

$ foo \u003d new foo ();
$ İsim \u003d "İsim";

eko.<<<"EOT"
Benim adım "$ isim". $ Foo-\u003e foo yazarım.
Şimdi ($ foo-\u003e bar) yazıyorum.
Bu "A" başlığını geri çekmemelidir: \\ x41
Eot;
?>

Bu örneğin sonucu:

Benim adım "$ isim". $ Foo-\u003e foo yazarım. Şimdi ($ foo-\u003e bar) yazıyorum. Bu "A" başlığını geri çekmemelidir: \\ x41

Örnek # 9 Statik verileri kullanma örneği

sınıf foo (
Kamu $ bar \u003d<<<"EOT"
bar.
Eot;
}
?>

Yorum Yap:

NowDOC desteği PHP 5.3.0'a eklendi.

Değişkenlerin işlenmesi

Dize çift tırnak içinde veya heredoc ile belirtilirse, içindeki değişkenler işlenir.

İki tür sözdizimi vardır: basit ve karmaşık. Basit sözdizimi daha kolay ve kullanışlıdır. Değişken işleme, dizinin değerini sağlar ( dizi.) veya nesne özellikleri ( nesne.) minimum çabayla.

Karmaşık sözdizimi, ifadeyi çevreleyen kıvırcık parantezlerde belirlenebilir.

Basit sözdizimi

Tercüman dolar işareti karşılıyorsa ( $ ), değişkenin doğru adını oluşturmak mümkün olduğunca çok fazla karakter yakalar. İsminin sonunu doğru bir şekilde tanımlamak istiyorsanız, kıvırcık parantez içinde bir değişken adı sonlandırın.

$ meyve suyu \u003d "Apple";

echo "Bazı $ meyve suyu suyu içti." . Php_eol;

// yanlış. "S", değişken ismi için sadık bir karakterdir, ancak değişken, $ meyve suyu adına sahiptir.
yankı "$ meyve suyundan yapılmış bir meyve suyu içti." ;

// Doğru şekilde. Parantez kullanarak değişken adın kesinlikle listelenen sonu:
echo "$ (meyve suyu) s'lik bir meyve suyu içti." ;
?>

Bu örneğin sonucu:

Bazı elma suyu içti. Yapılmış bir meyve suyu içti. Elmalardan yapılmış bir miktar meyve suyu içti.

Bir dizi elemanı benzer şekilde işlenebilir ( dizi.) veya nesne özelliği ( nesne.). Dizi kapanış kare braketinin indekslerinde ( ] ) Dizin tanımının sonunu gösterir. Nesnenin özellikleri için, aynı kurallar basit değişkenler için geçerlidir.

Örnek # 10 Örnek Basit Sözdizimi

tanımlamak ("koolaid", "koolaid1");
$ juices \u003d dizi ("Apple", "turuncu", "koolaid1" \u003d\u003e "mor");

echo "Bazı $ jices [0] suyu içti." . Php_eol;
yankı "Bazı $ jiices [1] meyve suyu içti." . Php_eol;
echo "Bazı $ suları [koolaid1] suyu içti." . Php_eol;

sınıf insanlar (
Public $ John \u003d "John Smith";
Public $ Jane \u003d "Jane Smith";
Public $ Robert \u003d "Robert Paulsen";

Public $ Smith \u003d "Smith";
}

$ insanlar \u003d yeni insanlar ();

echo "$ insanlar -\u003e John bazı $ jices [0] suyu içti." . Php_eol;
echo "$ insanlar -\u003e John sonra $ insanlara merhaba dedi -\u003e Jane." . Php_eol;
echo "$ insanlar -\u003e John" karısı, $ insanları selamladı -\u003e Robert. "Php_eol;
echo "$ insanlar -\u003e Robert, iki $ insanı selamladı -\u003e Smiths." ; // çalışmıyor
?>

Bu örneğin sonucu:

Bazı elma suyu içti. Bazı portakal suyu içti. Bazı mor meyve suyu içti. John Smith bazı elma suyu içti. John Smith daha sonra Jane Smith'e merhaba dedi. John Smith'in karısı Robert Paulsen'i selamladı. Robert Paulsen ikisini selamladı.

PHP 7.1.0 Eklendi Destek olumsuz sayısal dizinler.

Örnek # 11 Negatif Sayısal Endeksler

$ String \u003d "string";
eko. "Dizin -2 ile sembolü eşittir$ String [- 2]. ", Php_eol;
$ string [- 3] \u003d "O";
eko. "Sembolü -3 konumundaki" O "konumundaki değiştirme aşağıdaki dizgiyi verir:$ String. ", Php_eol;
?>

Bu örneğin sonucu:

-2 dizinli sembol n. Sembolü -3 pozisyonunda değiştirme "O", aşağıdaki satırı verir: güçlü

Daha karmaşık bir şey için, karmaşık sözdizimi kullanın.

Karmaşık (figürlü) sözdizimi

Zor olarak adlandırılır, çünkü anlamada zordur, ancak karmaşık ifadeler kullanmanıza izin verir.

Herhangi bir skaler değişkeni, bir dizi öğesi veya bir dizgede görüntülenen bir nesne özelliği bu sözdiziminin hattında sunulabilir. Sadece ifadeyi ve hattın dışındaki ifadeyi yazın ve sonra girin { ve } . Gibi { Korumalı olamaz, bu sözdizimi yalnızca ne zaman tanınacaktır. $ Doğrudan olmalı { . Kullanmak {\$ yazdırmak {$ . Birkaç açıklayıcı örnek:

// tüm hataları göster
error_reporting (e_all);

$ Great \u003d "harika";

// çalışmıyor, görüntüler: (harika)
echo "bu ($ harika)";

// çalışır, ekranlar: Harika
echo "bu ($ harika)";

// İşler
eko. "Bu genişlik kare($ Meydan -\u003e Genişlik) 00 santimetre. ";

// çalışmalar, tırnak içine alınan tuşlar, sadece şekil braketi sözdizimi ile çalışır
echo "çalışıyor: ($ arr [" tuş "])";

// İşler
yankı "çalışıyor: ($ arr [4] [3])";

// Dışında $ Foo olarak aynı sebepten dolayı yanlış
// satırları. Başka bir deyişle, hala işe yarayacak,
// Fakat PHP ilk önce bir foo sabitini aradığından, neden olur
// Hata Seviyesi E_NOTICE (belirsiz sabit).
eko. "Bu doğru değil:($ Arr [foo] [3]) ";

// İşler. İçinde çok boyutlu diziler kullanırken
// satırlar her zaman kıvırcık parantez kullanır
echo "çalışıyor: ($ arr [" foo "] [3])";

// İşler.
echo "çalışıyor:". $ arr ["foo"] [3];

eko. "Ayrıca çalışıyor:($ Obj -\u003e değerler [3] -\u003e İsim) ";

eko. "Bu, adlandırılan bir değişkenin değeridir.$ İsim: ($ ($ isim)) ";

eko. "Bu, GetName () işlevini döndüren ada göre bir değişkenin değeridir:($ (getName ())) ";

eko. "Bu, \\ $ Object-\u003e GetName () döndüren ada göre bir değişkenin değeridir:($ ($ Nesne -\u003e getName ())) ";

// Çalışmıyor, görüntüler: Bu GetName () i döndürür: (GetName ())
eko. "GetName () 'nin iade ettiği şeydir: (getName ())";
?>

Bu sözdizimiyle, nesnenin hatlarının içindeki özelliklerine erişmek de mümkündür.

sınıf foo (
Var $ bar \u003d "Ben barım." ;
}

$ foo \u003d new foo ();
$ Bar \u003d "bar";
$ BAZ \u003d dizi ("foo", "bar", "BAZ", "Quux");
echo "($ foo -\u003e $ bar) \\ n";
echo "($ foo -\u003e ($ BAZ [1])) \\ n";
?>

Bu örneğin sonucu:

Ben barım. Ben barım.

Yorum Yap:

Fonksiyonları, yöntem çağrıları, statik sınıf değişkenleri, ayrıca içinde çalışan sınıflar {$} Bununla birlikte, PHP sürüm 5 ile başlayarak, belirtilen değer, değişkenin belirlendiği dize olarak aynı bağlamda değişkenin adı olarak işlenecektir. Tek kıvırcık parantez kullanma ( {} ) İşlevlerin, yöntemlerin, sınıf sabitlerinin veya statik değişkenlerin değerlerine erişmek için işe yaramaz.

// tüm hataları göster
error_reporting (e_all);

sınıf biraları (
Const SoftDrink \u003d "rootbeer";
Kamu statik $ ale \u003d "ipa";
}

$ rootbeer \u003d "A & W";
$ iPa \u003d "Alexander Keith \\" s ";

// çalışır, görüntüler: A & W istiyorum
echo "istiyorum ($ ($ (bira :: softdrink)) \\ n";

// de çalışıyor, görüntüler: Alexander Keith "si istiyorum.
echo "$ (bira :: $ ale)) \\ n";
?>

Dizgedeki sembole ve değişimine erişim

Çizgilerdeki semboller, dizgenin başlangıcına göre, sıfırdan başlayarak, örneğin bir dizeden sonra kare parantez içinde, örneğin, $ str. Bu amaç için çizgiyi düşünün, bir karakter dizisi olarak. 1'den fazla sembolü almanız veya değiştirmeniz gerekirse, işlevleri kullanabilirsiniz. substr () ve substr_replace ().

Yorum Yap: PHP 7.1.0 ile başlayarak, negatif yer değiştirme değerleri desteklenir. Çizginin sonundan ofseti tanımlarlar. Önceden, olumsuz ofset düzeyde bir hataya neden oldu E_notice Okurken (boş bir dize döndürür) veya E_warning Kayıt yaparken (dize değişmeden bırakın).

Yorum Yap: Satırdaki sembol ayrıca, örneğin $ str (42) ile kıvırcık dirseklerle de tedavi edilebilir.

Dikkat

Ofset'e dizenin sınırları üzerine yazmaya çalışmak, bu ofsetten önce dizgiyi boşluklarla tamamlayacaktır. Neum tipleri bütüne dönüştürülecek. Geçersiz yer değiştirme türü seviye hatasına neden olur E_warning. Sadece satırın ilk sembolü kullanılır. PHP 7.1.0 ile başlayarak, boş bir dizgenin atanması ölümcül bir hataya neden olur. Bu durumda, sıfır bayt (null) atandı.

Dikkat

PHP'deki satırlar dahili olarak bayt dizilerini temsil eder. Sonuç olarak, yer değiştirme dizisindeki erişim veya değişim, multibit kodlaması açısından güvensizdir ve yalnızca, örneğin ISO-8859-1 gibi tek baytlık kodlamalarda dizelerle gerçekleştirilmelidir.

Yorum Yap: PHP 7.1.0 ile başlayarak, boş bir indeks kullanımı, bu durumda dize bir dizi uyarmadan bir diziye dönüştürüldüğü durumlarda ölümcül bir hataya neden olur.

Örnek # 12 Çoklu Satır Örnekleri

// İlk karakter dizgisi sembolünü al
$ str \u003d "Bu bir test." ;
$ ilk \u003d $ str [0];

// üçüncü dize sembolünü al
$ Üçüncü \u003d $ str [2];

// Son karakter dizgisi sembolünü edinin
$ str \u003d "Bu hala bir test." ;
$ Son \u003d $ str [Strlen ($ ST) - 1];

// Son karakter dizgisi sembolünü değiştirme
$ str \u003d "denize bak";
$ Str [Strlen ($ str) - 1] \u003d "E";

?>

PHP 5.4 ile başlayarak, dizedeki ofset, bir tamsayı veya bir dizgeyi içeren bir dize ayarlanmalıdır, aksi takdirde bir uyarı verilecektir. Önceden ofset, belirtilen türde "Foo", uyarılar olmadan, dönüştürüldü 0 .

Örnek # 13 PHP 5.3 ve PHP 5.4 arasındaki farklar

$ str \u003d "abc";

Var_dump ($ str ["1"]);
var_dump (isset ($ str ["1"]));

Var_dump ($ str ["1.0"]);
var_dump (isset ($ str ["1.0"]));

Var_dump ($ str ["x"]);
var_dump (isset ($ str ["x"]));

Var_dump ($ str ["1x"]);
var_dump (isset ($ str ["1x"]));
?>

PHP 5.3'te bu örneğin sonucu:

string (1) "B" Bool (True) String (1) "B" Bool (True) String (1) "A" Bool (True) String (1) "B" Bool (True)

PHP 5.4'teki bu örneğin sonucu:

string (1) "B" Bool (True) UYARI: Yasadışı String Ofset "1.0") LINE 7 String (1) "B" BOOL (FALSE) UYARI: Yasadışı Dize Ofset "X" / TMP / T.PHP On Line 9 String (1) "A" Bool (False) String (1) "B" Bool (FALSE)

Yorum Yap:

Diğer türlerin değişkenlerine (belirli arayüzleri uygulayan nesneler hariç) bir girişimi veya {} sessizce dönüş BOŞ.

Yorum Yap:

PHP 5.5 Syntax kullanarak dizgi değişkenlerdeki sembollere erişim için destek eklendi veya {} .

Dizeleri değiştirmek için birçok faydalı özellik vardır.

Ana fonksiyonlar, dize fonksiyonlarının bölümünde ve genişletilmiş arama ve değiştirme için - Perl uyumlu düzenli ifadelerin işlevleri.

Dize dönüştür

Değer getirerek bir dizgeye dönüştürülebilir (String)veya fonksiyonlar strval (). Dizenin gerekli olduğu ifadelerde, dönüşüm otomatik olarak gerçekleşir. Bu, işlevleri kullandığınızda olur. eko. veya yazdır.Veya değişkenin değeri dize ile karşılaştırıldığında. Türlerin türlerinin ve manipülasyonlarının bölümlerini okumak, aşağıdakileri daha anlaşılabilir hale getirecektir. Ayrıca bakınız settype ().

Diziler her zaman bir dize dönüştürülür "Dizi"Böylece dizinin içeriğini gösteremezsiniz ( dizi.) Kullanma eko. veya yazdır.Ne içerdiğini öğrenmek için. Ayrı bir öğeyi görüntülemek için gibi bir şey kullanın echo $ arr ["foo"]. Tüm içeriği nasıl gösterilir / görüntüleme ile ilgili aşağıdaki ipuçlarına bakın.

Değişken türünü dönüştürmek için "Nesne" tipte dize Kullanılan sihirli yöntem __ToString.

Değer vermek BOŞ Her zaman boş bir dizeye dönüştürülür.

Yukarıda görebileceğiniz gibi, dizilerin dizisine, nesnelerin veya kaynaklara doğrudan dönüşüm, türleri dışında, değerler hakkında herhangi bir faydalı bilgi vermez. Hata ayıklama için değerleri çıktı için daha uygun bir yol - kullanım işlevleri print_r () ve var_dump ().

PHP'deki çoğu değer, sabit depolama için bir dizeye dönüştürülebilir. Bu yöntemin seri hale getirilmesi denir ve bir işlev kullanılarak gerçekleştirilebilir. serialize ().

Sayılarla satır dönüşümü

Dize sayısal bir değer olarak tanınırsa, ortaya çıkan değer ve tip aşağıda gösterildiği gibi tanımlanır.

Dize karakterlerden herhangi birini içermezse ".", "E" veya "E" ve sayının değeri, tamsayıların sınırları içine yerleştirilir (tanımlanmıştır) Php_int_max), dize bir tamsayı olarak tanınacak ( tamsayı). Diğer tüm durumlarda, yüzen bir nokta numarası olarak kabul edilir ( şamandıra).

Değer, çizginin ilk kısmı ile belirlenir. Dize doğru bir sayısal değerle başlarsa, bu değer kullanılacaktır. Aksi takdirde, değer 0 (sıfır) olacaktır. Doğru sayısal değer, sonraki isteğe bağlı gösterge ile sunulan işaretin talebi üzerine bir veya daha fazla rakam (ondalık bir nokta içerebilir). Derecesi göstergesi, bir veya daha fazla sayıdan sonra "E" veya "E" dir.

$ Foo \u003d 1 + "10.5"; // $ foo float (11.5)
$ Foo \u003d 1 + "-1.3e3"; // $ foo float (-1299)
$ Foo \u003d 1 + "bob-1.3e3"; // $ foo tamsayıdır (1)
$ Foo \u003d 1 + "bob3"; // $ foo tamsayıdır (1)
$ Foo \u003d 1 + "10 küçük domuz"; // $ foo tamsayıdır (11)
$ Foo \u003d 4 + "10.2 küçük piggies"; // $ foo float (14.2)
$ Foo \u003d "10.0 domuz" + 1; // $ foo float (11)
$ Foo \u003d "10.0 domuz" + 1.0; // $ foo float (11)
?>

Bu dönüşüm hakkında daha fazla bilgi için, bkz. UNIX Strtod (3) Dokümantasyon bölümüne bakın.

Bu bölümün örneklerinden herhangi birini test etmek istiyorsanız, kopyalayıp yapıştırın ve ne olduğunu görmek için bir sonraki satırı yapın:

echo "\\ $ foo \u003d\u003d $ foo; tür:". GetType ($ foo). "
\\ n ";
?>

Bir tamsayı dönüştürerek (örneğin C'de yapıldığı gibi) bir sembol kodu almayı beklemeyin. Karakterleri ASCII kodlarına dönüştürmek ve işlevleri geri kullanmak için ord () ve chr ().

Bir dize tipinin uygulanmasının detayları

7 yıl önce.

Belgeler söylemez, ancak Heredoc'un sonunda bir kapanış noktalı virgül aslında gerçek bir noktalı virgül olarak yorumlanır ve bu nedenle bazen sözdizimi hatalarına yol açar.

$ Foo \u003d.<<abcd.
Son;
?>

Bu değil:

foo (<<abcd.
Son;
);
// sözdizimi hatası, beklenmedik ";"
?>

Noktalı virgül olmadan, iyi çalışıyor:

foo (<<abcd.
Son.
);
?>

3 yıl once.

CHAR dizisi gibi dize kullanabilirsiniz (C gibi)

$ a \u003d "string dizi testi";

var_dump ($ a);
// Return String (17) "Dize Array Testi"

var_dump ($ a);
// Return String (1) "s"

// - dizi döküm ile -
var_dump ((dizi) $ a);
// Dönüş Dizisi (1) (\u003d Dize (17) "Dize Array Testi")

var_dump ((dizi) $ a);
// Return String (17) "s"

Norihiori.

15 YIL ÖNCE.

Bir dizgenin içindeki hem nesne özelliklerinin hem de nesne yöntemlerinin değerini koymak için karmaşık sözdizimini kullanabilirsiniz. Örneğin ...
sınıf testi (
Toplu $ \u003d 1;
Kamu fonksiyonu iki () () (
Dönüş 2;
}
}
$ Test \u003d Yeni Test ();
echo "Foo ($ Test -\u003e Bir) Bar ($ Test -\u003e İki ())";
?>
"Foo 1 bar 2" çıkacaktır.

Ancak, ad alanınızdaki tüm değerler için bunu yapamazsınız. Sınıf sabitleri ve statik özellikler / yöntemler işe yaramaz çünkü karmaşık sözdizimi "$" arar.
sınıf testi (
Const bir \u003d 1;
}
echo "foo (test :: bir) çubuğu";
?>
Bu "Foo (Test :: One) Bar" çıkacaktır. Sabitler ve statik özellikler dizeyi parçalamanızı sağlar.

3 yıl once.

"Numaralara Dize dönüşümü" ile tutarlı olduğuna dikkat edin:

Eğer ("123ABC" \u003d\u003d 123) Echo ise "(İntstr \u003d\u003d int) yanlış testler doğru.";

// Bir taraf bir sayı olduğundan, dize yanlış bir şekilde INTSTR'den Int'e dönüştürülür, bu da test numarasıyla eşleşir.

// durumlar gibi tüm şartlar için geçerlidir (muhtemelen ilerlerken de)!

// Bu, kullanıcı girişini test ederken / kullanırken / kullanma, kullanırken, yalnızca bir tamsayı için test ederken büyük bir güvenlik riski olabilir.

// SEMS SEMS SEMS, 123'ün "123" olarak bir dize olmasıdır, bu nedenle dönüşüm olmaz.

?>

6 YIL ÖNCE.

Dizelerdeki lider sıfırlar (en az sürpriz) sekizlik olarak kabul edilmez.
Düşünmek:
$ x \u003d "0123" + 0;
$ y \u003d 0123 + 0;
echo "x $ x, y $ y"; // baskılar "x 123, Y 83"
dİĞER BİR DEYİŞLE:
* Kaynak kodundaki sayısal edebiyatlarda lider sıfırlar "oktal" olarak yorumlanır, C.F. Strtol ().
* Dizelerde (örneğin kullanıcı tarafından gönderilen veriler), bir tamsayıya döküldüğünde (örneğin kullanıcı tarafından gönderilen veriler) önde gelen sıfırlar göz ardı edilir ve ondalık olarak kabul edilir, C.F. Strtod ().

10 yıl önce.

İşte, çift kote edilen dizelerin ve heredocların sabitler ve diğer fonksiyon çağrıları da dahil olmak üzere kıvırcık parantez sözdiziminde keyfi ifadeler içermelerine izin vermek için kolay bir hack:

// Beyanı kesmek
İşlev _Expr ($ v) ($ v;)
$ _EXPR \u003d "_EXPR";

// oyun alanımız.
tanımlayın ("qwe" , "ASD");
tanımlamak("ZXC", 5 );

$ A.= 3 ;
$ B.= 4 ;

İşlevi. c.($ A., $ B.) (Dönüş.$ A.+ $ B.; }

// kullanım
eko."Pre.{ $ _Expr.(1 + 2 )} \\ N "; // "Ön 3. Posta" çıktıları
eko."Pre.{ $ _Expr.(qwe.)} \\ N "; // "Pre ASD POST" çıkışları
eko."Pre.{ $ _Expr.(c.($ A., $ B.)+ zxc.* 2 )} \\ N "; // "17 POST" çıkışları "

// Genel Sözdizimi ($ _EXPR (...))
?>

2 yıl önce.

Bu yorumu eklemek için bu yorumu eklemek faydalı olsaydı, böylece en azından PHP sitesinde doğru sayfada görünür.

İlişkilendirici bir anahtarla çift çeken bir dizgeyi kullanmayı düşünüyorsanız, T_encapsed_and_whiteefas hatasına girebilirsiniz. Bunu daha az belirgin hata mesajlarından biri olarak görüyor.

Gibi bir ifade:

$ Meyve.\u003d dizi (
"A"=> "Elma",
"B"=> "MUZ",
// vb.
);

Yazdır "Bu bir$ Meyve.[ "A"] "; // t_encapsed_and_whitespace.
?>

kesinlikle parçalara ayrılacak.

Aşağıdaki gibi çözebilirsiniz:

yazdır."Bu bir$ Meyve.[ a.] " ; // anahtarı tanımla
yazdır."Bu bir${ meyve.[ "A"]} " ; // karmaşık sözdizimi
yazdır."Bu bir{ $ Meyve.[ "A"]} " ; // karmaşık sözdizimi varyasyonu
?>

Son değişiklik için kişisel bir tercihim var, çünkü ifadenin dize dışında nasıl olacağına daha doğal ve daha yakın olduğu için.

Net değil (en azından) neden PHP'nin ifadesinin içindeki tek teklifi yanlış yazar, ancak gerçeği alıntılarla yapılacak bir şeye sahip olduğunu hayal ediyorum. Birşeyin önüne geçmek ...?

2 yıl önce.

Her ikisi de çalışmalı :(

sınıfTest yapmak{
Kamu statik.
$ Var.= "Statik";
Halk const var \u003d
"Const";

Kamu işlevi. sayhellostatik.() {
Eko.
"Merhaba:{ $ Bu:: $ Var.} " ;
}

Kamu işlevi. sayhelloconst.() {
Eko.
"Merhaba:{ $ Bu:: var)" ; // ayrıştırma hatası: sözdizimi hatası, beklenmedik ")", bekliyor "["
}
}

$ Obj.\u003d Yeni.Test yapmak();
$ Obj.-> sayhellostatik.();
$ Obj.-> sayhelloconst.();

3 yıl once.

Hiç şüphe yok ki birine yardım edecek bir şey. . .
Editörümde, bu sözdizimi HTML ve $ yorumu vurgulayacak:

$ Html \u003d.<<<"EOD"
$ yorum
EOD;

Bunu kullanmak aynı rengi gösteriyor:

$ Html \u003d.<<$ yorum
EOD;

Çalışmak için çok daha kolay hale getirmek

11 yıl önce.

Aklını kurtarmak için, tarihler hakkında önceki yorumları okudum;)

Bot dizeleri sayısallara dönüştürüleceğinde (in ("$ a"\u003e "$ B") testi) daha sonra netlenmiş sayısallar kullanıldığında, diğer tam dizeler Char-by Char ile karşılaştırılır:

var_dump("1.22" > "01.23" ); // bool (yanlış)
var_dump("1.22.00" > "01.23.00" ); // bool (true)
var_dump("1-22-00" > "01-23-00" ); // bool (true)
var_dump((Şamandıra)"1.22.00" \u003e (Şamandıra)"01.23.00" ); // bool (yanlış)
?>

PHP'deki satırlar, tek veya çift tırnaklarla çerçevelenmiştir. Ana fark, çift tırnak içinde bir değişken ile ikame edilebilmesidir:

Şimdi PHP'deki ders değişkenlerinin görevine başka bir çözüm bulabiliriz:

$ başlık"; Eko"

$ İçerik
"; ?>

PHP dizgede bir değişkeni nasıl bulur?

Her şey basit. Değişken adında hangi karakterlerin kullanılabileceğini unutmayın? Bunlar sayılar, harfler ve vurgulamak _.

İşte PHP ve her şeyin her şey için kabul ettiği $ sembolü ve ilk yasak sembolü arasında kabul eder.

Aşağıdaki PHP kodunda, değişkenin adını yanlış bir şekilde belirler ve bir hata verecektir:

Tarayıcıda sonuç:

Uyarı: Tanımsız Değişken: D: \\ Openserver \\ Domains \\ site \\ index.php On Line 3'te

PHP'ye doğru bir şekilde dize değişkenin adını belirleyin, kıvırcık parantez içine () yerleştirmeniz gerekir:

Tarayıcıda sonuç:

1499rub

En açık olmayan bir fikir yoktur, hiçbir şeyin ikame edilmesi gereken sıradan çizgiler için hangi alıntıların kullanılması gerektiğidir. Bununla birlikte, birçok programcı tek tırnak kullanmayı tercih eder.

Gerçek şu ki, çoğu kişinin "bu satıra bir şey yerine getirmesi gerekir" dedi. Bu nedenle, sıradan metin için tek tırnakları kullanmanızı ve yalnızca metindeki değişkeni yerine geçmeniz gerektiğinde çift. Misal:

Koruyucu Tırnaklar

Dizenin içine alıntı yapmanız gerekiyorsa, yapmanın 2 yolu vardır:

İkinci örnekte, ters katman \\ PHP'nin bir dize olarak algıladığı için sonra bir sonraki alıntıları korur.

SADECE TERPSE SLAŞ'INI GÖRMEK İÇİN YAPABİLİRSİNİZ? Sonuçta, kapanış teklifini koruyacak. Komik, ancak ilk önce korunmak için ikinci bir eğik çizgi yazmanız gerekir:

Tablolama ve dize çift tırnak aktarımı

Çift tırnak içinde ters katman, sadece tırnakları ve kendinizi değil, diğer bazı karakterleri de korumanızı sağlar. En popüler olanı bir sekmedir (sekmeye bastığınızda elde ettiğiniz uzun alan) ve dizenin aktarılmasını sağlar. Buna benziyorlar:

Bir komut dosyası yazın:
1. Bir oyun değerine sahip bir $ tipi değişken oluşturur.
2. "World of Warcraft" değerinin (Quotes ile) ile değişken bir $ adı oluşturur.
3. Etiketin içindeki her iki değişkeni de görüntüler.

. Değişkenler arasında bir boşluk olmalı.

Dizeleri tasarlamak için ne tür tırnak kullanımı - kesme veya klasik çift tırnak?

PHP'deki çift ve tek tırnak arasındaki farkı analiz edelim ve örneklerde, ne zaman kullanmanız gerektiğini öğrenin.

Tek tırnak içine alınmış satırlarda karşılaşılan özel karakterler için değişkenler ve ekranlama sekansları işlenmez. Apostroflar tarafından çerçevelenmiş çizgiler, PHP tercüman tarafından çift tırnaklarla çevrili benzer çizgilerden çok daha hızlı işlenir.

Buradaki nedeni basittir: İkili tırnaklardaki çizgiler tercüman php ek olarak değişkenleri kontrol eder ve eğer bunlar bulunursa, dizedeki değişken ad yerine, değerini ekler. Ancak, kesme işlemlerinde sonuçlanan dize, tercüman tarafından sıradan metin olarak algılanır ve bu PHP hatlarında hiçbir dönüşüm yapmaz. Herhangi bir durumda, tek alıntılardaki çizgilerin işlenmesinin daha hızlı gerçekleşeceği açık olduğunu düşünüyorum.

Başlamak için, dizenin nasıl belirleneceğini ve ardından satırların tek alıntılardaki ne kadar hızlı olduğunu kontrol ettik.

Dizeyi belirlemenin en kolay yolu, tek tırnaklara (") ile sonuçlandırmaktır. Tek tırnak içine alınan ipin içindeki tek tırnakları kullanmak için, blendajlı, tersi açık olan (\\) sembolünün önünde olması gerekir. Ters lavabo tek bir tekliften önce gitmesi veya hattın sonunda olmalıysa, onu çoğaltmanız gerekir. Başka bir karakteri korumaya çalışırsanız, ters batan özelliği de yazdırılır.

Tek alıntıların kullanılmasına bir örnek veriyoruz:
// Kaldır: Basit Dize
echo "basit satır";
// kaldırır: ben burada m
yankı "Ben burada" m ";
// dışarı çıkacak: eklenmeyecek: \\ n Yeni dize
echo "eklenmez: \\ n yeni dizge";
// Out: $ örnek değişkeni de değiştirilmeyecek
echo "$ örnek değişken de değiştirilmez"; Dize çift tırnak içine alınmışsa ("), PHP özel karakterler için daha fazla kontrol dizisini tanır ve ayrıca değerinin dizesinde değişken ad yerine ikame edilir. Bir dize içindeki çift tırnak kullanmak için, tek tırnak içinde olduğu gibi Sonuçlandı. Çift tırnak içinde, ters örgü (\\) sembolü ile önde olmalıdır.

Çift tırnak kullanılmasına bir örnek verelim:
// Kaldır: Basit Dize
echo "basit satır";
// DOĞRU DOĞRU: FİRMA "Snowdrop" "
echo "firma \\" snowdrophry \\ "";
// dışarı çıkacak: yeni bir dizgiye çevirecek
yankı "yeni çizginin \\ n" tercüme edecektir;
// Dışarı çıkacak: Değişken ikame edecek
$ example \u003d "ichitut";
yankı "değişken $ örnek"; Ayrıca, sıradan metin için "\\ n" (yeni satır), "\\ r" (iade vagon), HTML için değil, hatırlanmalıdır. Böylece tarayıcıda değişiklikler görmeyeceksiniz (yalnızca sayfanın kaynak sayfasında).

Tek iki çift tırnaklardan daha hızlı bulalım. Ölçümler için kısa bir test komut dosyası yazın ve hemen test etmesi durumunda, bilgisayarınızın veya sunucunuzun donanımına bağlı olan sonuçlar farklı olacaktır.
// döngünün başlangıcındaki zaman damgasını döndür
$ Start \u003d mikrotime (true);
// 1 milyon yineleme için bir döngü döngüsü oluşturun
için ($ i \u003d 0; $ i< 1000000; $i++) {
$ Metin \u003d "İşte bir sembol dizesi";
}
// harcanan zamanı hesapla
$ Time \u003d (mikrotime (doğru) - $ başlangıç); Sonuç: 0.09 saniye.

Tek Kişilik Tırnaklar Değiştirirsek Çift:
$ Metin \u003d "İşte bir sembol dizesi"; Sonuç 0,10 saniyeye eşit olacaktır.

Gördüğümüz gibi, metin çizgileri kullanırken, yürütme zamanındaki fark çok küçük, hatta söylenebilir ve hiç yok. Dizeyi ve değişkenleri birleştirmeye çalıştığımızda en ilginç olanı başlayacaktır.
$ Text \u003d "İşte $ $ i" sembol hattı; veya
$ metin \u003d $ i. "İşte sembolik bir dize"; Sonuç yaklaşık olarak: 0.27 saniyedir.

Fark çok hassastır. Birleştirilme ve çift tırnak, dize değişkenler eklendiğinde, hızını açıkça etkiler.

Sunucu kodu işlediğinde, değişkenler, sabitler ve diğer için çift tırnak tüm içeriğini kontrol eder. O zaman alır. Sunucu arasında, sunucu işlemleri bitmiş metin olarak işler ve orada ne olduğunu umursamıyor. Tek ve çift tırnakların hızı arasındaki fark çok önemsizdir, ancak çok yüklü bir proje geliştirirseniz, biraz kaydedilmiş milisaniye zaten bir zaferdir.