|
|
|
|
|
|
|
Bir dizge string türünde bir sayıl değer olup bir dizi karakterden oluşur. Bu bakımdan her karakter tek bayt ile ifade edilir. Yani, olası karakter sayısı 256'dan ibarettir. Bu yüzden PHP Evrenkod için yerleşik desteğe sahip olamıyor. Temel Evrenkod işlevselliği hakkında bilgi edinmek için utf8_encode() ve utf8_decode()işlevlerine bakınız.
Bilginize: Bir dizgenin çok büyük olması bir sorun teşkil etmez. PHP, string türünde bir değer için boyut sınırlaması yapmaz; tek sınırlama PHP'nin çalıştığı makinede PHP'nin kullanımına ayrılan bellek miktarıdır.
Sözdizimi ¶
string türünde bir sayıl dört şekilde belirtilebilir:
Tek tırnaklı dizgeler ¶
Bir dizgeyi belirtmenin en basit yolu dizgeyi tek tırnak (') imlerinin arasına almaktır.
Tek tırnaklı bir dizge içinde tek tırnağı sayıl değeriyle kullanmak isterseniz önüne bir tersbölü imi getirmelisiniz (). Bir tersbölü imini sayıl değeriyle kullanmak isterseniz onun da önüne bir tersbölü imi getirmelisiniz (). Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız, tersbölü imi karakterle birlikte basılır.
Bilginize: Diğer üç sözdiziminin aksine, değişkenler ve özel karakterlerin öncelemleri tek tırnaklı dizgelerin içinde kullanıldıklarında yorumlanmazlar.
Çift tırnaklı dizgeler ¶
Eğer bir dizge çift tırnak (") içine alınmışsa PHP, aşağıdaki özel karakter öncelemlerini yorumlayacaktır:
Tersbölü ile öncelenmiş karakterler
| Öncelem |
Anlamı |
| n |
satırsonu (LF veya ASCII 10 (0x0A)) |
| r |
satırbaşı (CR veya ASCII 13 (0x0D)) |
| t |
yatay sekme (HT veya ASCII 9 (0x09)) |
| v |
düşey sekme (VT veya ASCII 11 (0x0B)) (PHP 5.2.5 ve sonrası) |
| f |
sayfa ileri (FF veya ASCII 12 (0x0C)) (PHP 5.2.5 ve sonrası) |
| |
tersbölü |
| $ |
dolar imi |
| " |
çift tırnak |
| [0-7]{1,3} |
Bu düzenli ifade ile eşleşen dizilim, karakterin sekizlik gösterimidir. |
| x[0-9A-Fa-f]{1,2} |
Bu düzenli ifade ile eşleşen dizilim, karakterin onaltılık gösterimidir. |
Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız, tersbölü imi karakterle birlikte basılır. PHP 5.1.1'den önce, {$var} içindeki tersbölü imi basılmıyordu.
Çift tırnaklı dizgelerin en önemli özelliği içerdiği değişkenlerin yorumlanmasıdır. Bu konuda daha ayrıntılı bilgi edinmek için Değişken çözümleme bölümüne bakınız.
Yorumlu metinler ¶
Bir dizgenin sınırlarını belirlemenin üçüncü yolu, yorumlu metin sözdizimidir. Bir yorumlu metin daima <<< karakterleri ile başlar ve hemen ardından bir betimleyici ve bir satırsonu karakteri gelir. Asıl dizge satırsonu karakterinden sonra yer alır. Dizgenin sonunu belirtmek üzere dizgenin sonuna, baştaki betimleyici konur.
Kapanış betimleyicisinin dizgeden sonraki satırın başında olması gerekir. Ayrıca, betimleyici PHP'deki diğer isimlere uygulanan kurallara uygun olmalıdır: Sadece bir harfle veya alt çizgi imi ile başlayabilir; sadece harfler, rakamlar veya alt çizgi imleri içerebilir.
Uyarı
Kapanış betimleyicisinin bulunduğu satırda betimleyicinin hemen ardına konan noktalı virgül (;) dışında hiçbir karakter bulunmaması çok önemli olup buna özellikle dikkat etmelisiniz. Yani, betimleyici özellikle girintilenmemeli; noktalı virgülden önce ve sonra herhangi bir boşluk karakteri bulunmamalıdır. Ayrıca, kapanış betimleyicisinden hemen önce gelen karakterin yerel işletim sistemine özgü satırsonu karakteri olması çok önemlidir. Bu karakter Unix ve Mac OS X için n'dir. Kapanış betimleyicisinden (ve olası noktalı virgül karakterinden) sonraki karakter de böyle bir satırsonu karakteri olmalıdır.
Eğer bu kurallara uyulmaz ve kapanış betimleyicisinin etrafı temiz tutulmazsa kapanış betimleyicisi algılanamayacağından PHP kapanış betimleyicisini aramaya devam edecektir. Eğer dosyanın sonuna kadar uygun bir kapanış betimleyicisi bulunamazsa son satırda bir çözümleme hatası oluşacaktır.
Yorumlu metinler sınıf özelliklerini ilklendirmek için kullanılamazlar. PHP 5.3'ten beri bu sınırlama sadece değişken içeren yorumlu metinler için geçerlidir. Bunun yerine yorumsuz metinler kullanılabilir.
Örnek 1 - Geçersiz örnek
<?php
class foo {
public $bar = <<<EOT
bar
EOT;
}
?>
Yorumlu metinler tıpkı çift tırnaklı dizgeler gibi davranırlar. Yorumlu metin çift tırnaklar arasına alınmaz ve metin içindeki çift tırnak imlerinin tersbölü ile öncelenmesi gerekmez, ancak yukarıda çift tırnaklı dizgeler için belirtilen öncelem kodları kullanılabilir. Değişkenler yorumlanır, fakat yorumlanan metin içinde yer alan karmaşık değişkenler ifade edilirken dizgelerde dikkate alınması gerekenler yorumlu metinlerde de dikkate alınmalıdır.
Örnek 2 - Yorumlu metin örneği
<?php
$str = <<<EOD
Yorumlu metin sözdizimi
kullanılarak çok sayıda
satıra bölünmüş dizge örneği.
EOD;
/* Değişkenlerin de kullanıldığı daha karmaşık bir örnek */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'Kimimben';
echo <<<EOT
Adım "$name" ve işim $foo->foo basmak.
Şimdi {$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: x41n
EOT;
?>
Yukarıdaki örneğin çıktısı:
Adım "Kimimben" ve işim Foo basmak.
Şimdi Bar2 basıyorum.
Bu büyük 'A' basmalı: A
Ayrıca işlev değiştirgesinde veri aktarırken de yorumlu metin kullanılabilir:
Örnek 3 - Değiştirgelerde yorumlu metin kullanımı
<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
PHP 5.3.0'dan itibaren, duruk değişkenleri ve sınıf özelliklerini veya sabitlerini yorumlu metin sözdizimini kullanarak ilklendirmek mümkündür:
Örnek 4 - Duruk değer olarak yorumlu metin kullanımı
<?php
// Duruk değişkenler
function foo()
{
static $bar = <<<LABEL
Burada hiçbir şey yok...
LABEL;
}
// Sınıf özellikleri ve sabitleri
class foo
{
const BAR = <<<FOOBAR
Sınıf sabiti örneği
FOOBAR;
public $baz = <<<FOOBAR
Özellik örneği
FOOBAR;
}
?>
PHP 5.3.0 ile ayrıca, yorumlu metinlerin bildiriminde çift tırnak kullanımı olasılığı da dikkate alınmıştır:
Örnek 5 - Yorumlu metin bildiriminde çift tırnak kullanımı
<?php
echo <<<"TIRNAKLI"
Merhaba Dünya!
TIRNAKLI;
?>
Bilginize:
Yorumlu metin desteği PHP 4'te eklenmiştir.
Yorumsuz metinler ¶
Yorumlu metinlerin çift tırnaklı dizgelere karşılık gelmesi gibi yorumsuz metinler de tek tırnaklı dizgelere karşılık gelir. Yorumsuz metinler de yorumlular gibi belirtilir ama, yorumsuz metin içinde çözümleme yapılmaz. Yorumsuz metinler, PHP kodlarını veya büyük metin bloklarını herhangi bir önlem almaksızın içine yerleştirmek için elverişlidirler. Belirtilen metin bloğunun çözümlenmemesinden dolayı SGML'nin <![CDATA[ ]]> oluşumu ile benzer özelliklere sahiptir.
Yorumsuz metin de yorumlu metindeki <<< dizgesini kullanır fakat betimleyicisi tek tırnak içine alınır; yani, şuna benzer: <<<'EOT'. Yorumlu metin için geçerli tüm diğer kurallar yorumsuz metin için de geçerlidir; özellikle de kapanış betimleyici ile ilgili olanlar.
Örnek 6 - Yorumsuz metin örneği
<?php
$str = <<<'EOD'
Yorumlu metin sözdizimi
kullanılarak çok sayıda
satıra bölünmüş dizge örneği.
EOD;
/* Değişkenli daha karmaşık bir örnek. */
class foo
{
public $foo;
public $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'Kimimben';
echo <<<'EOT'
İsmim "$name" ve işim $foo->foo basmak.
Artık {$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: x41
EOT;
?>
Yukarıdaki örneğin çıktısı:
İsmim "$name" ve işim $foo->foo basmak.
Artık {$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: x41
Bilginize:
Yorumlu metinlerin aksine yorumsuz metinler herhangi bir duruk veri bağlamında kullanılabilirler. Sınıf özelliklerini veya sabitlerini yorumsuz metin kullanarak ilklendirme örneği:
Örnek 7 - Duruk veri örneği
<?php
class foo {
public $bar = <<<'EOT'
bar
EOT;
}
?>
Bilginize:
Yorumlu metin desteği PHP 5.3.0'da eklenmiştir.
Değişken çözümleme ¶
Bir dizge çift tırnaklar arasında veya bir yorumlu metin olarak belirtilmişse içindeki değişkenler çözümlenir.
İki sözdizimi türü vardır: Biri basit, diğeri karmaşık. Basit sözdizimi en çok kullanılanı ve elverişli olanıdır; bir değişken, bir dizi değeri veya bir nesne özelliğini bir dizge içinde en az çabayla kullanmayı sağlar.
Karmaşık sözdizimi PHP4'ten itibaren kullanılmakta olup ifadeyi sarmalayan kaşlı ayraçlar biçiminde kendini gösterir.
Basit Sözdizimi
Çözümleyici, bir dolar imine ($) rastlandığında, geçerli bir değişken ismi oluşturmak için alabildiği bütün dizgecikleri açgözlülükle toplar. Değişken isminin kaşlı ayraçlar arasına alınması ismin sonunun açıkça belirtilmesini sağlar.
Bir dizi indisi veya bir nesne özelliği de benzer şekilde çözümlenebilir. Dizi indislerinde indis sonunu, kapayan köşeli ayraç (]) belirler. Aynı kural, basit değişkenler olarak nesne özelliklerine de uygulanır.
Bunlardan daha karmaşık herşey için karmaşık sözdizimini kullanmalısınız.
Karmaşık (kaşlı ayraçlı) sözdizimi
Buna karmaşık denmesinin sebebi sözdiziminin karmaşıklığı değil, karmaşık ifadelerin kullanımını mümkün kılmasıdır.
Aslında, isim alanındaki her değer, bir dizge içinde bu sözdizimi ile yer alabilir. İfade basitçe dizge dışındaki gösterimiyle yazılıp { ve } arasına alınır. {öncelenemeyeceğinden bu sözdizimi sadece $ iminin { iminin hemen ardında yer aldığı durumlarda tanınır. {$ kullanımı bir sayıl {$ alınmasıyla sonuçlanır. Bazı örnekler:
Bu sözdizimini kullanan dizgeler içindeki değişkenler üzerinden de sınıf özelliklerine erişmek mümkündür.
Bilginize:
İşlev ve yöntem çağrılarının, duruk sınıf değişkenlerinin ve sınıf sabitlerinin {$} içinde çağrılması PHP 5'ten beri çalışmaktadır. Erişilen değer, dizgenin tanımlandığı etki alanındaki bir değişkenin ismi olarak yorumlanır. Kaşlı ayraçların tek başına kullanımı ({}), duruk sınıf değişkenlerinin veya sınıf sabitlerinin değerlerine veya işlev ve yöntemlerin dönüş değerlerine erişim için kullanılmaz.
Dizge erişimi ve karaktere göre değişiklik ¶
Dizgelerin içindeki karakterlere, dizilerin köşeli ayraçları arasında karakterin dizinin başlangıcından itibaren (ilk karakterin indisi sıfır olmak üzere) kaçıncı karakter olduğu belirtilerek ($dizge[42] gibi) erişilebilir veya o karakterde değişiklik yapılabilir. Dizgeler bu nedenle bir karakter dizisi olarak düşünülür. 1 karakterden fazlasını elde etmek veya yer değiştirmek isterseniz substr() ve substr_replace() işlevlerini kullanabilirsiniz.
Bilginize: Dizge karakterlerine ayrıca $str{42} biçeminde kaşlı ayraçlar kullanılarak da erişilebilirse de bu sözdiziminin kullanımı PHP 5.3.0 itibariyle önerilmemektedir. Bu amaçla kaşlı ayraçları değil, daima köşeli ayraçları tercih edin; örnek: $str[42].
Uyarı
Karakter indisi olarak dizgenin uzunluğundan büyük bir değer belirtmek, dizgenin sonuna boşlukların eklenmesine sebep olur. Tamsayı olmayan indis değerleri tamsayıya dönüştürülür. Kuraldışı indis belirtimi E_NOTICE'e sebep olur. Yazma sırasında negatif indisler bir E_NOTICEçıktılanmasına sebep olurken okuma işlemi boş dizge okunmasıyla sonuçlanır. Atanmış bir dizgenin sadece ilk karakteri kullanılır. Boş dizge atamak NULL atamasıyla sonuçlanır.
Örnek 8 - Bazı dizge örnekleri
<?php
// Dizgenin ilk karakterini alalım
$str = 'This is a test.';
$first = $str[0];
// Dizgenin üçüncü karakterini alalım
$third = $str[2];
// Dizgenin son karakterini alalım
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
// Dizgenin son karakterini değiştirelim
$str = 'Look at the sea';
$str[strlen($str)-1] = 'e';
?>
Bilginize:
Diğer türlerdeki değişkenlere [] veya {} kullanarak erişme çabası NULL dönmesiyle sonuçlanır.
Dizgeye dönüşüm ¶
Bir değer bir dizgeye (string) tür çarpıtması veya strval() işleviyle dönüştürülür. Bir dizgenin gerekli olduğu ifade bağlamlarında dizgeye dönüşüm özdevinimli olarak gerçekleşir. Bu genellikle, echo() veya print() işlevleri kullanılırken veya bir değişken bir dizge ile karşılaştırılırken gerçekleşir. Aşağıdakilere, Türler ve Tür Dönüşümü bölümlerinde daha ayrıntılı değinilmiştir. Ayrıca, settype() işlevine de bakabilirsiniz.
boolean türündeki TRUE değeri string türündeki "1" değerine dönüştürülür. boolean türündeki FALSE değeri string türündeki "" değerine (boş dizgeye) dönüştürülür. Bu şekilde, boolean ve string değerler arasında her iki yönde de dönüşüm yapılabilmektedir.
integer veya float türünde bir değerin string türüne dönüşümü sayının dizgesel gösterimiyle (üstel gösterim dahil) sonuçlanır. Kayan noktalı sayılar üstel gösterim kullanılarak dönüştürülebilir (4.1E+6 gibi).
Bilginize:
Ondalık nokta karakteri betiğin çalıştığı yerele (LC_NUMERIC) özgüdür. Bakınız: setlocale() işlevi.
Diziler daima "Array" dizgesine dönüştürülür; bundan dolayı echo() ve print() bir dizinin içeriğini kendiliklerinden gösteremezler. Tek bir dizi elemanını görüntüleyebilmek için echo $arr['foo'] gibi bir oluşum kullanınız. İçeriğin tamamının görüntülenebilmesiyle ilgili ipuçları için aşağıya bakınız.
object türler PHP 4'te daima "Object" dizgesine dönüştürülür. Nesne özelliklerinin değerlerini hata ayıklama amacıyla basmak için aşağıdaki paragrafı okuyunuz. Nesne sınıfının ismini öğrenmek için get_class() işlevini kullanınız. PHP 5 itibariyle, uygulanabildiği takdirde, __toString yöntemi kullanılır.
resource türler daima "Resource id #1" benzeri bir dizgeye dönüştürülürler; buradaki 1, özkaynağa PHP tarafından çalışma anında atanan eşsiz bir sayıdır. Bu yapıya güvenmeseniz iyi olur; ilerde değişebilir. Özkaynağın türünü öğrenmek için get_resource_type() işlevini kullanınız.
NULL daima boş bir dizgeye dönüştürülür.
Yukarıda bahsedildiği gibi, bir diziyi, nesneyi veya özkaynağı doğrudan dönüştürmek, bunların değerleri hakkında işe yarar hiçbir bilgi sağlamaz. Bu tür içerikleri daha verimli şekilde incelemek isterseniz print_r() ve var_dump() işlevlerine bakınız.
Çoğu PHP değeri kalıcı olarak saklamak amacıyla dizgelere dönüştürülebilir. Bu yönteme dizgeleştirme adı verilir ve serialize() işlevi tarafından gerçekleştirilir. Eğer PHP motoru WDDX desteğiyle derlenmişse PHP değerleri ayrıca iyi biçimli XML metin olarak da dizgeleştirilebilir.
Dizgelerin sayılara dönüşümü ¶
Bir dizge, sayısal bir bağlamda değerlendirildiğinde sonuçlanacak değer ve türün nasıl belirleneceği aşağıda açıklanmıştır.
Dizge, '.', 'e' veya 'E' karakterlerini içermiyorsa ve sayısal değeri PHP_INT_MAX ile tanımlanan genişlikte bir tamsayı ise string tür bir integer tür olarak, aksi takdirde bir float olarak değerlendirilir.
Değerin dizgenin başında belirtileceği varsayılır. Eğer dizge geçerli bir sayısal veri ile başlıyorsa sayısal değer olarak bu kullanılır. Aksi takdirde değer 0 (sıfır) olacaktır. Geçerli sayısal veri isteğe bağlı bir işaret ile başlar, bir veya daha fazla sayıda rakam ile isteğe bağlı bir ondalık nokta içerebilir ve isteğe bağlı bir üstel gösterimle sona erer. Üs, 'e' veya 'E' harfini takibeden bir veya daha fazla rakamdan oluşur.
Bu dönüşüm nakkında daha ayrıntılı bilgi edinmek için strtod(3) Unix kılavuz sayfasına bakınız.
Bu bölümdeki örneklerden birini denemek isterseniz örnekleri kopyala/yapıştır yöntemiyle aşağıdaki satıra yerleştirip neler olup bittiğini görebilirsiniz:
Tamsayıya dönüştürerek C'deki gibi bir karakterin kodunu alabilmeyi beklemeyin. Karakter/ASCII kod dönüşümleri için ord() ve chr() işlevlerini kullanınız.
|
|
Bugün 57756 ziyaretçi (114384 klik) kişi burdaydı!
|
|
|