Php'de çift tırnak. PHP'de tek ve çift tırnaklı dizeler arasındaki fark nedir? Php'de kaçan tırnak işaretleri

Bu kısa makale, nasıl ve nerede kullanılacağını gösterir PHP'deki alıntılar.

PHP'de tek tırnak işaretleri (kesme işaretleri)

Tek tırnak içine alınan dizeler PHP tarafından hiçbir şekilde işlenmez. Yani tek tırnaklar, aralarındaki metni olduğu gibi temsil eder.

// Doğru echo "Hayat nasıl?"; echo "Hayat nasıl? $isim"; echo "Hayat nasıl?".$name; // Yanlış echo "Nasılsın? $isim";

Tek ve çift tırnak içindeki özel karakterler

Örneğin sekme karakterinin (\t) eğik çizgi ve t harfi yerine sekme karakteri olarak yorumlanmasını sağlamak için, sekme karakterini içeren metin satırını çift tırnak içine almanız gerekir. \' ve \\ karakterlerini yalnızca tek tırnak içinde kullanabilirsiniz. Tek tırnak içinde diğer tüm kaçış dizilerine (\n, \r, \$ vb.) izin verilmez.

// Yanlış echo "Nasılsın?\n"; // Doğru echo "Nasılsın?\n";

Bir dize içinde çift tırnak işaretinden kaçınmak için tırnak işaretlerini \" ters eğik çizginin önüne yerleştirin.

// Yanlış yankı "

Naber?

"; // Yankıyı düzeltin "

Naber?

"; Eko "

Naber?

";

PHP'de çift tırnak

Çift tırnak içine alınmış metin çok farklı şekilde ele alınır. Örneğin, çift tırnak içine alınan değişkenler kendi değerleriyle değiştirilir. Bu, oluşturmayı kolaylaştırır SQL sorgularıçift ​​tırnak kullanarak.

$query = "Tabloya INSERT (gönderi,yazar,metin,tarih) VALUES ("$id", "$yazar", "$metin", "$tarih"");

Dizeleri biçimlendirmek için ne tür tırnak işaretleri kullanmalıyım - kesme işaretleri mi yoksa klasik çift tırnak mı?

PHP'de çift ve tek tırnak arasındaki farka bakalım ve örnekler kullanarak hangisinin ne zaman kullanılacağını öğrenelim.

Değişkenler ve kaçış dizileri özel karakterler, tek tırnak içine alınmış dizelerde meydana gelenler işlenmez. Kesme işaretiyle çevrelenmiş dizeler, PHP yorumlayıcısı tarafından çift tırnakla çevrelenmiş benzer dizelerden çok daha hızlı işlenir.

Bunun nedeni basit: PHP yorumlayıcısı ayrıca çift tırnak içindeki dizeleri değişkenlerin varlığı açısından kontrol eder ve eğer bulunursa, değişken adı yerine dizeye değeri eklenir. Ancak kesme işareti içine alınmış bir satır yorumlayıcı tarafından normal metin olarak algılanır ve PHP bu satırlarda herhangi bir dönüşüm gerçekleştirmez. Her durumda dizeleri tek tırnak içinde işlemenin daha hızlı olacağını düşünüyorum.

Öncelikle string nasıl tanımlanacağını anlatalım, ardından tek tırnak içinde stringlerin işlenmesinin ne kadar hızlı olacağını kontrol edelim.

Bir dize tanımlamanın en basit yolu, onu tek tırnak işaretleri (") içine almaktır. Tek tırnaklı bir dize içinde tek tırnak işaretleri kullanmak için, bunların önüne bir ters eğik çizgi (\), yani kaçış işareti konulmalıdır. Ters eğik çizginin gelmesi gerekiyorsa Tek bir alıntıdan önce veya satırın sonunda onu kopyalamanız gerekir. Başka bir karakterden kaçmaya çalışırsanız ters eğik çizgi de yazdırılacaktır.

İşte tek tırnak kullanmanın bir örneği:
// Çıktı: Basit dize
echo "Basit dize";
// Çıktılar: Buradayım
echo "Ben buradayım";
// Çıktı: Bu şunu eklemeyecek: \n yeni satır
echo "Bu eklenmeyecek:\nyenisatır";
// Çıktılar: $example değişkeni de değiştirilmeyecek
echo "$example değişkeni de değiştirilmeyecek"; Eğer dize çift tırnak ("") içine alınmışsa, PHP özel karakterler için daha fazla kaçış dizisini tanır ve ayrıca dizedeki değişken adının değerini de değiştirir. Tek tırnak içinde olduğu gibi, double içine alınmış bir dize içinde çift tırnak kullanmak için Tırnak işaretlerinin önüne ters eğik çizgi (\) konulmalıdır.

Burada çift tırnak kullanımına bir örnek verilmiştir:
// Çıktı: Basit dize
echo "Basit dize";
// Çıktılar: Şirket "Kardelen"
echo "Şirket \"Kardelen\"";
// Çıktı: Bu yeni bir satıra yol açacak
echo "Bu yeni bir satıra bölünecek\n";
// Çıktı: Değişken değiştirilecek
$example = "değiştirilecek";
echo "Değişken $örneği"; Ayrıca "\n" (yeni satır), "\r" (satır başı) dizisinin HTML için değil, düz metin için olduğunu da unutmamalısınız. Yani tarayıcıda değişiklikleri görmezsiniz (yalnızca kaynak kodu sayfalar).

Tek tırnakların çift tırnaklara göre ne kadar hızlı olduğunu öğrenelim. Ölçümler için kısa bir test komut dosyası yazacağız ve bunu kendiniz test ederseniz, PC'nizin veya sunucunuzun donanımına bağlı olarak sonuçların farklı olacağını hemen not edeceğiz.
// Döngünün başlangıcındaki zaman damgasını döndür
$başlangıç ​​= mikrozaman(doğru);
// 1 milyon yinelemelik bir döngü oluşturun
için ($i = 0; $i< 1000000; $i++) {
$text = "Burada bir karakter dizisi var";
}
// Harcanan zamanı hesaplıyoruz
$zaman = (mikrozaman(doğru) - $başlangıç); Sonuç: 0,09 saniye.

Tek tırnak işaretlerini çift tırnak işaretleri ile değiştirirsek:
$text = "Burada bir karakter dizisi var"; Sonuç 0,10 saniye olacaktır.

Gördüğünüz gibi, metin dizelerini kullanırken yürütme süresindeki fark çok küçüktür, hatta hiç var olmadığı bile söylenebilir. Eğlence, bir dize ile bir değişkeni birleştirmeye çalıştığımızda başlar.
$text = "İşte $i karakter dizisi"; veya
$metin = $i."Burada bir karakter dizisi var"; Sonuç yaklaşık: 0,27 saniye.

Fark oldukça belirgindir. Birleştirme ve çift tırnak, dizeye değişkenler eklendiğinde performansı açıkça etkiler.

Sunucu kodu işlediğinde, değişkenler, sabitler ve daha fazlası için çift tırnakların tüm içeriğini kontrol eder. O zaman alır. Ve sunucu tek tırnakların arasında olanı hazır metin olarak işler ve orada ne olduğuna bakmaz. Tek ve çift tırnakların performansı arasındaki fark çok küçüktür, ancak çok yüklü bir proje geliştiriyorsanız, kazanılan birkaç milisaniye zaten bir zaferdir.

PHP'de bir dize herhangi bir uzunluktaki karakter kümesidir. C'den farklı olarak dizeler boş karakterler de içerebilir ve bu, programı hiçbir şekilde etkilemez. Başka bir deyişle, ikili verileri depolamak için dizeler kullanılabilir. Dizenin uzunluğu yalnızca boş RAM miktarıyla sınırlıdır.

PHP'de bir karakter bir baytla aynıdır, bu da tam olarak 256 farklı karakterin mümkün olduğu anlamına gelir. Bu aynı zamanda PHP'nin yerel Unicode desteğine sahip olmadığı anlamına da gelir. Bazı Unicode desteği işlevler tarafından sağlanır. utf8_encode() Ve utf8_decode() .

Dize, standart işlevler kullanılarak kolayca işlenebilir ve ayrıca karakterlerinden herhangi birine doğrudan erişebilirsiniz.

Bir dize değişkeninin basit bir örneği:

$bir= "Bu yalnızca bir dize değişkeninde saklanan metindir";
yankı $a; //Çıktı "Bu yalnızca bir dize değişkenine yazılan metindir"
?>

Şimdi veri türü sözdizimine ayrıntılı olarak bakalım. sicim.

Dize türünün sözdizimi

Bir dizi üç farklı şekilde tanımlanabilir.

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

Bir dize içinde tek bir tırnak işareti kullanmak için, diğer birçok dilde olduğu gibi, bunun önüne ters eğik çizgi karakteri () gelmelidir. \ ), yani tarayın. Ters eğik çizginin tek bir tırnak işaretinden önce gelmesi veya satırın sonunda olması gerekiyorsa onu kopyalamanız gerekir. Başka bir karakterden kaçmaya çalışırsanız ters eğik çizginin de yazdırılacağını unutmayın! Yani genellikle ters eğik çizginin kendisinden kaçmaya gerek yoktur.

Diğer iki sözdiziminden farklı olarak, dizelerin içinde yer alan özel karakterler için değişkenler ve kaçış dizileri, Olumsuz işleniyor.

İşte tek tırnak kullanmanın bir örneği:

Eko "bu basit bir dizedir";

Eko "Ayrıca satırlara da ekleyebilirsiniz
yeni satır karakteri böylece,
çünkü bu normal"
;

// Çıktı: Arnold bir keresinde şöyle demişti: "Geri döneceğim"
Eko "Bir gün Arnold 'Geri döneceğim' dedi.";

Eko "C:\\*.*'yi sildiniz mi?";

// Çıkışlar: C:\*.*'yı sildiniz mi?
echo "C:\*.*'ı sildiniz mi?" ;

// Çıktı: Bu şunu eklemeyecek: \n yeni satır
Eko "Bu eklenmeyecek:\nyenisatır";

// Çıktılar: $expand ve $either değişkenlerinin yeri değiştirilmez
Eko "$expand ve $ither değişkenleri değiştirilmez";
?>

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

Kontrol sırası tablosu:

Alt sıra Anlam
\N yeni satır (ASCII'de LF veya 0x0A (10))
\R satır başı (ASCII'de CR veya 0x0D (13))
\T yatay sekme (ASCII'de HT veya 0x09 (9))
\\ ters eğik çizgi
\$ dolar işareti
\" çift ​​tırnak
\{1,3} düzenli bir ifadeye karşılık gelen bir karakter dizisi, sekizli sayı sistemindeki bir karakter
\x(1,2) düzenli ifadeye karşılık gelen karakter dizisi, onaltılık sayı sistemindeki karakter

Başka bir karakteri anımsatmak istiyorsanız ters eğik çizginin de basılacağını tekrar hatırlayalım!

Dizeleri tanımlamanın başka bir yolu da kullanmaktır. heredoc sözdizimi ("<<< "). Sonrasında<<< необходимо указать идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий вставку.

Kapanış tanımlayıcısı satırın ilk sütununda başlamalıdır. Ek olarak, tanımlayıcının PHP'deki diğer tüm etiketlerle aynı adlandırma kurallarına uyması gerekir: yalnızca alfasayısal karakterler ve bir alt çizgi içermeli ve rakam olmayan bir veya alt çizgi ile başlamalıdır.

Dikkat! Kapanış tanımlayıcı satırının noktalı virgül () dışında başka karakter içermediğine dikkat etmek çok önemlidir. ; ). Bu, tanımlayıcının noktalı virgülden önce veya sonra boşluk veya sekme olamayacağı anlamına gelir. Kapanış tanımlayıcısından önceki ilk karakterin, işletim sisteminiz tarafından tanımlandığı şekilde bir yeni satır karakteri olması gerektiğini anlamak da önemlidir. Örneğin, Windows®'ta bu \R.

Bu kural ihlal edilirse ve kapanış tanımlayıcısı "temiz" değilse, kapanış tanımlayıcısının eksik olduğu kabul edilir ve PHP onu aramaya devam eder. Bu durumda doğru kapanış tanımlayıcısı asla bulunamazsa, betiğin sonundaki satır numarasıyla işlemde hataya neden olur.

Heredok-text, çift tırnak içindeki bir dizeyle aynı şekilde davranır, ancak bunlara sahip değildir. Bu, heredoc'ta alıntılardan kaçış yapmanıza gerek olmadığı anlamına gelir, ancak yine de yukarıdaki kaçış dizilerini kullanabilirsiniz. Değişkenler işlenir, ancak heredoc içinde karmaşık değişkenleri kullanırken dizelerle çalışırken olduğu kadar dikkatli olmanız gerekir.

Heredoc dizesini tanımlama örneği:

$dizge =<<Örnek satır,
birkaç satırı kapsayan,
Heredoc sözdizimini kullanarak.
EOD;

/* Değişkenlerle daha karmaşık bir örnek. */
sınıf foo
{
var $foo;
var $çubuk;

foo() işlevi
{
$this -> foo = "Foo";
$this -> bar = array("Bar1", "Bar2", "Bar3");
}
}

$foo = yeni foo();
$isim = "İsmim";

Eko<<Benim adım "$isim". $foo yazıyorum-> foo.
Şimdi çıkarım yapıyorum
( $foo -> çubuk [ 1 ]) .
Bu büyük harf "A" çıkmalıdır:
\x41
EOT;
?>

PHP programlama konusunda uzman değilim, ancak PHP'de neden tek ve bazen çift tırnak içine alınmış bir dize içeren bazı kodlar gördüğüm konusunda biraz kafam karıştı.

Sadece .NET veya C dilinde tek tırnak içindeyse bunun bir dize değil, bir karakter olduğu anlamına geldiğini biliyorum.

Çözüm

Bilmen gereken

$a = "isim"; $b = "benim $a'm"; == "benim adım" $c = "benim $a"; != "benim adım"

PHP'de insanlar "a", "my name", "abc xyz" gibi sabit bir dize tanımlamak için tek tırnak işaretleri kullanırken, "a $b $c $d" gibi bir tanımlayıcı içeren bir dize tanımlamak için çift tırnak kullanırlar.

Ve başka bir şey de

"Benim adım"ı yankılayın;

daha hızlı

"Benim adım"ı yankılayın;

"Benim" ifadesini tekrarla. $a;

Daha yavaş

"Benim $a'mı" yankılayın;

Bu, kullanılan diğer dizeler için de geçerlidir.

PHP'de, tek tırnak içindeki metin bir dize değeri olarak ele alınırken, çift tırnak içindeki metin, değerlerini değiştirerek ve işleyerek değişkenleri ayrıştırır.

$test = "değişken"; echo "Merhaba Bay $test"; // çıktı şu şekilde olacaktır: Merhaba Bay değişken echo "Merhaba Bay $test"; // çıktı şöyle olacaktır: Merhaba Bay $test

Burada çift tırnak, değeri ayrıştırır ve tek tırnak, bir dize değeri olarak değerlendirilir ($test değişkeni ayrıştırılmadan).

Her iki iç içe geçmiş karakter türü de dizelerdir. Başka bir teklif türünü sonuçlandırmak için bir teklif türünü kullanmak uygundur. """ ve """ Alıntı türleri arasındaki en büyük fark, iç içe tanımlayıcı referansların tek tırnak yerine çift tırnak içinde değiştirilmesidir.

Bir dize bir karakter kümesidir. PHP'de bir karakter bir baytla aynıdır, bu da tam olarak 256 farklı karakterin mümkün olduğu anlamına gelir. Bu aynı zamanda PHP'nin yerel Unicode desteğine sahip olmadığı anlamına gelir.Bazı Unicode desteği utf8_encode() ve utf8_decode() işlevleri tarafından sağlanır.

Not: Dize çok büyükse sorun yoktur. PHP'nin dizelerin boyutuna ilişkin neredeyse hiçbir kısıtlaması yoktur, bu nedenle uzunlukları konusunda endişelenmenize kesinlikle gerek yoktur.

Sözdizimi

    Bir dizi üç farklı şekilde tanımlanabilir.

Tek tırnak

Bir dizeyi tanımlamanın en basit yolu, onu tek tırnak içine almaktır (" karakteri).

Bir dize içinde tek bir tırnak işareti kullanmak için, diğer birçok dilde olduğu gibi, bunun önüne ters eğik çizgi (\), yani kaçış işareti konulmalıdır. Ters eğik çizginin tek bir tırnak işaretinden önce gelmesi veya satırın sonunda olması gerekiyorsa onu kopyalamanız gerekir. Başka bir karakterden kaçmaya çalışırsanız ters eğik çizginin de yazdırılacağını unutmayın! Yani genellikle ters eğik çizginin kendisinden kaçmaya gerek yoktur.

Not: PHP 3'te bu durumda E_NOTICE seviyesinde bir mesaj verilecektir.

Not: Diğer iki sözdiziminden farklı olarak, tek tırnaklı dizelerde görünen özel karakterlere ilişkin değişkenler ve kaçış dizileri işlenmez.

Echo "bu basit bir dizedir"; echo "Normal olduğu için dizelere bu şekilde de yeni satır karakteri ekleyebilirsiniz"; // Çıktılar: Arnold bir keresinde şöyle demişti: "Geri döneceğim" echo "Arnold bir keresinde şöyle demişti: "Geri döneceğim""; // Çıkışlar: C:\*.*'yı sildiniz mi? echo "C:\\*.*'yi sildiniz mi?"; // Çıkışlar: C:\*.*'yı sildiniz mi? echo "C:\*.*'yi sildiniz mi?"; // Çıktılar: Bu eklenmeyecek: \n yeni bir satır echo "Bu eklenmeyecek: \n yeni bir satır"; // Çıktılar: $expand ve $her iki değişken de değiştirilmedi echo "$expand ve $her iki değişken de değiştirilmedi";

İkili alıntı

Eğer dize çift tırnak (") içine alınmışsa, PHP özel karakterler için daha fazla kaçış dizisini tanır:

Tablo 11-1. Kaçış dizileri

Tekrarlıyoruz, eğer başka bir karakteri anımsatmak istiyorsanız ters eğik çizgi de yazdırılacaktır!

Ancak çift tırnaklı dizelerin en önemli özelliği değişkenlerin işlenmesidir. Daha fazla ayrıntıya bakın: dize işleme.

Heredok

Dizeleri tanımlamanın başka bir yolu da heredoc sözdizimini kullanmaktır ("

Kapanış tanımlayıcısı satırın ilk sütununda başlamalıdır. Ek olarak, tanımlayıcının PHP'deki diğer tüm etiketlerle aynı adlandırma kurallarına uyması gerekir: yalnızca alfasayısal karakterler ve bir alt çizgi içermeli ve rakam olmayan bir veya alt çizgi ile başlamalıdır.

Dikkat

Kapanış tanımlayıcı satırının muhtemelen noktalı virgül (;) dışında başka karakter içermediğine dikkat etmek çok önemlidir. Bu, tanımlayıcının girintili olmaması gerektiği ve noktalı virgülden önce veya sonra boşluk veya sekme bulunamayacağı anlamına gelir. Kapanış tanımlayıcısından önceki ilk karakterin, işletim sisteminiz tarafından tanımlandığı şekilde bir yeni satır karakteri olması gerektiğini anlamak da önemlidir. Örneğin, Macintosh'ta \r şeklindedir.

Bu kural ihlal edilirse ve kapanış tanımlayıcısı "temiz" değilse, kapanış tanımlayıcısının eksik olduğu kabul edilir ve PHP onu aramaya devam eder. Bu durumda doğru kapanış tanımlayıcısı asla bulunamazsa, betiğin sonundaki satır numarasıyla işlemde hataya neden olur.

Heredoc metni, çift tırnak içindeki bir dizeyle aynı şekilde davranır, ancak bunlara sahip değildir. Bu, heredoc'ta alıntılardan kaçış yapmanıza gerek olmadığı anlamına gelir, ancak yine de yukarıdaki kaçış dizilerini kullanabilirsiniz. Değişkenler işlenir, ancak heredoc içinde karmaşık değişkenleri kullanırken dizelerle çalışırken olduğu kadar dikkatli olmanız gerekir.

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

$dizge =<<foo = "Foo"; $this->bar = array("Bar1", "Bar2", "Bar3"); )) ) $foo = yeni foo(); $isim = "İsmim"; Eko<<foo. Şimdi ($foo->bar) çıktısını alıyorum. Bunun çıktısı büyük harf "A" olmalıdır: \x41 EOT;

Not: Heredoc desteği PHP 4'e eklenmiştir.

Değişkenleri İşleme

Bir dize çift tırnak içinde veya heredoc kullanılarak tanımlanmışsa, içindeki değişkenler işlenir.

İki tür sözdizimi vardır: basit ve karmaşık. Basit sözdizimi daha kolay ve daha kullanışlıdır. Bir değişkeni, dizi değerini veya nesne özelliğini işlemenize olanak tanır.

Karmaşık sözdizimi PHP 4'te tanıtıldı ve ifadeyi çevreleyen küme parantezleriyle tanınabilir.

Basit sözdizimi

Yorumlayıcı bir dolar işaretiyle ($) karşılaşırsa, geçerli bir değişken adı oluşturmak için mümkün olduğu kadar çok karakter alır. Bir adın sonunu belirtmek istiyorsanız değişken adını küme parantezleri içine alın.

$bira = "Heineken"; echo "$bira"nın tadı harika"; // çalışıyor, """ değişken adı için geçersiz bir karakter echo "Biraz $bira içti"; // çalışmıyor, "s" geçerli bir değişken adıdır echo "Biraz $(bira)s içti"; // çalışır echo "Biraz ($bira) içti"; // İşler

Bir dizi elemanı (dizi) veya bir nesnenin (nesnenin) bir özelliği aynı şekilde işlenebilir. Dizi indekslerinde, kapanış köşeli parantezi (]), indeks tanımının sonunu işaret eder. Basit değişkenler için geçerli olan aynı kurallar nesne özellikleri için de geçerlidir, ancak değişkenlerde olduğu gibi kandırılamazlar.

// Bu örnekler özellikle // dizelerin içindeki dizilerin kullanılmasıyla ilgilidir. Dizelerin dışında, // dizinizin dize anahtarlarını her zaman tırnak içine alın ve dizelerin dışında (parantez) kullanmayın. // Tüm hataları gösterelim error_reporting(E_ALL); $meyveler = array("çilek" => "kırmızı", "muz" => "sarı"); // Çalışıyor, ancak alıntılanan dize dışında farklı çalıştığını unutmayın echo "Bir muz $meyvedir."; //Çalışır echo "Bir muz ($meyveler["muz"])."; // Çalışıyor, ancak PHP aşağıda açıklandığı gibi ilk önce muz sabitini // arar. echo "Bir muz ($meyve)'dir."; // Çalışmıyor, küme parantezleri kullanın. Bu işlem hatasına neden olur. echo "Bir muz $meyve["muz"]'dur."; // Çalışır echo "Bir muz "dur. $meyveler["muz"] . "."; // Çalışır echo "Bu kare $kare->genişlik metre genişliğindedir."; // Çalışmıyor. Çözüm için karmaşık sözdizimine bakın. echo "Bu kare $square->width00 santimetre genişliğindedir.";

Daha karmaşık herhangi bir şey için karmaşık sözdizimini kullanmanız gerekir.

Karmaşık (kıvırcık) sözdizimi

Anlaşılması zor olduğu için değil, karmaşık ifadelerin kullanılmasına izin verdiği için karmaşık denilmektedir.

Aslında bu sözdizimi ile ad alanında bulunan herhangi bir değeri bir satıra dahil edebilirsiniz. İfadeyi satırın dışında yaptığınız gibi yazın ve ardından onu ( ve ) içine alın. "(" çıkışından çıkamayacağınız için, bu sözdizimi yalnızca $ hemen ('den sonra geldiğinde tanınacaktır. ("($") çıkışı için "(\$" veya "\($" kullanın.) Bazı açıklayıcı örnekler:

// Tüm hataları gösterelim error_reporting(E_ALL); $harika = "harika"; // Çalışmıyor, çıktısı şu olacak: Bu ( harika) echo "Bu ( $harika)"; // Çalışıyor, çıktısı alınacak: Bu harika echo "Bu ($harika)"; echo "Bu $(harika)"; // Çalışır echo "Bu kare ($kare->genişlik)00 santimetre genişliğindedir."; // Çalışır echo "Bu çalışır: ($dizi)"; // Bu, $foo'nun // satırı dışında geçersiz olmasıyla aynı nedenden dolayı geçersizdir. Başka bir deyişle, bu yine de işe yarayacaktır, // ancak PHP önce foo sabitini aradığından, // E_NOTICE (tanımsız sabit) hatası verecektir. echo "Bu yanlış: ($dizi)"; // İşler. Çok boyutlu diziler kullanırken, her zaman içinde küme parantezleri kullanın // strings echo "Bu işe yarar: ($arr["foo"])"; // İşler. echo "Bu işe yarıyor: ". $dizi["foo"]; echo "($nesne->değerler->isim) bile yazabilirsiniz"; echo "Bu, $isim adlı değişkenin değeridir: ($($isim))";

Bir dizedeki bir karaktere erişme ve onu değiştirme

Dizelerdeki karakterler, dizeden sonra küme parantezleri içinde sıfırdan başlayarak dizenin başlangıcından itibaren uzaklıkları belirtilerek kullanılabilir ve değiştirilebilir.

Not: Geriye dönük uyumluluk için, aynı amaçlarla dizi parantezlerini kullanma seçeneğiniz hâlâ mevcuttur. Ancak PHP 4'ten itibaren bu sözdizimi kullanımdan kaldırılmıştır.

Örnek 11-3. Bazı örnek dizeler

// String'in ilk karakterini alın $str = "Bu bir testtir."; $ilk = $str(0); // Dizenin üçüncü karakterini alın $üçüncü = $str(2); // String'in son karakterini alın $str = "Bu hala bir test."; $son = $str(strlen($str)-1); // Satırın son karakterini değiştirin $str = "Denize bakın"; $str(strlen($str)-1) = "I";

Yararlı Fonksiyonlar ve Operatörler

Dizeler "." operatörü kullanılarak birleştirilebilir. (nokta). Lütfen "+" toplama operatörünün burada çalışmadığını unutmayın. Daha fazla bilgi için bkz. Dize İşleçleri.

Dizeleri değiştirmek için birçok yararlı işlev vardır.

Ana işlevler, dize işlevleri, gelişmiş arama ve değiştirme için düzenli ifade işlevleri (iki bölüm halinde: Perl ve POSIX gelişmiş) bölümünde açıklanmaktadır.

Ayrıca URL dizeleri için işlevler ve dizeleri şifrelemek/şifresini çözmek için işlevler (mcrypt ve mhash) vardır.

Son olarak, aradığınızı hâlâ bulamadıysanız karakter türü işlevlerine de bakın.

Dizeye dönüştür

Bir cast (string) veya strval() fonksiyonunu kullanarak bir değeri string'e dönüştürebilirsiniz. Bir 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 dizeyle karşılaştırdığınızda meydana gelir. Kılavuzun Tipler ve Tip Manipülasyonu bölümlerini okumak aşağıdakileri daha net hale getirecektir. Ayrıca bkz. settype().

TRUE boole değeri "1" dizesine dönüştürülür ve FALSE değeri "" (boş dize) olarak temsil edilir. Bu şekilde, değerleri her iki yönde de - Boolean'dan dizeye ve tam tersi - dönüştürebilirsiniz.

Bir tamsayı veya kayan noktalı sayı, rakamlarından (kayan noktalı sayıların üssü dahil) oluşan bir sayıyla temsil edilen bir dizeye dönüştürülür.

Diziler her zaman "Dizi" dizesine dönüştürülür, dolayısıyla bir dizinin içeriğini, ne içerdiğini görmek için echo() veya print() kullanarak görüntüleyemezsiniz. Tek bir öğeyi görüntülemek için echo $arr["foo"] gibi bir şey yapmanız gerekir. Tüm içeriğin nasıl görüntüleneceği/görüntüleneceğine ilişkin ipuçları için aşağıya bakın.

Nesneler her zaman "Nesne" dizisine dönüştürülür. Hata ayıklama amacıyla bir nesne üye değişkeninin değerini yazdırmak istiyorsanız aşağıdaki paragrafları okuyun. Gerekli nesnenin sınıf adını almak istiyorsanız get_class() işlevini kullanın.

Kaynaklar her zaman "Kaynak kimliği #1" yapısına sahip dizelere dönüştürülür; burada 1, çalışma zamanında PHP tarafından kendisine atanan benzersiz kaynak numarasıdır. Kaynak türünü almak istiyorsanız kullanın.

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

Yukarıda görebileceğiniz gibi dizilerin, nesnelerin veya kaynakların çıktısını almak size değerlerin kendisi hakkında herhangi bir yararlı bilgi vermez. Hata ayıklama amacıyla değerleri yazdırmanın daha iyi bir yolu, print_r() ve var_dump() işlevlerini kullanmaktır.

Ayrıca kalıcı depolama için PHP değerlerini dizelere dönüştürebilirsiniz. Bu yönteme serileştirme adı verilir ve serileştirme() işlevi kullanılarak yapılabilir. Ayrıca PHP kurulumunuz WDDX desteğine sahipse PHP değerlerini XML yapılarına seri hale getirebilirsiniz.

Dizeleri sayılara dönüştürme

Eğer string sayısal bir değer olarak tanınırsa ortaya çıkan değer ve tip aşağıdaki gibi belirlenir.

Bir dize ".", "e" veya "E" karakterlerinden herhangi birini içeriyorsa kayan nokta olarak tanınacaktır. Aksi halde tamsayı olarak tanımlanacaktır.

Değer dizenin başlangıcına göre belirlenir. Satır geçerli bir sayısal değerle başlıyorsa bu değer kullanılacaktır. Aksi takdirde değer 0 (sıfır) olacaktır. Geçerli bir sayısal değer, isteğe bağlı olarak önüne bir işaret ve ardından isteğe bağlı bir üs gelen bir veya daha fazla rakamdan (ondalık nokta içerebilir) oluşur. Üs "e" veya "E" ve ardından bir veya daha fazla rakam gelir.

$foo = 1 + "10,5"; // $foo bir kayan noktadır (11.5) $foo = 1 + "-1.3e3"; // $foo bir kayan noktadır (-1299) $foo = 1 + "bob-1.3e3"; // $foo bir tam sayıdır (1) $foo = 1 + "bob3"; // $foo bir tam sayıdır (1) $foo = 1 + "10 Küçük Domuz"; // $foo bir tam sayıdır (11) $foo = 4 + "10.2 Küçük Domuzcuklar"; // $foo bir kayan noktadır (14.2) $foo = "10.0 domuz " + 1; // $foo float'tır (11) $foo = "10.0 domuz " + 1.0; // $foo kayan noktadır (11)

Bu dönüşüm hakkında daha fazla bilgi için Unix belgelerinde strtod(3) ile ilgili bölüme bakın.

Bu bölümdeki örneklerden herhangi birini test etmek isterseniz, bunu ve aşağıdaki satırı kopyalayıp yapıştırarak ne olacağını görebilirsiniz:

Echo "\$foo==$foo; yazın: ". gettype($foo) . "
\N";

Bir karakterin kodunu tamsayıya dönüştürerek elde etmeyi beklemeyin (örneğin C'de yapabileceğiniz gibi). Karakterleri kodlarına ve geri dönüştürmek için ord() ve tuşlarını kullanın.




Tepe