Tek tırnaklı dizeler
   
    Bir dizeyi belirtmenin en basit yolu dizeyi tek tırnak
    (') imlerinin arasına almaktır.
   
   
    Tek tırnaklı bir dize 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. \r veya
    \n gibi özel anlamı olan öncelemeler özel anlamı yoksayılarak olduğu gibi basılır.
   
   Bilginize: 
    
     çift tırnak ve
     yorumlu metin
     sözdizimlerinin aksine, değişkenler
     ve özel karakterlerin öncelemleri tek tırnaklı dizelerin içinde
     kullanıldıklarında yorumlanmazlar.
    
   
   
   
  
   Çift tırnaklı dizeler
   
    Eğer bir dize ç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)) | 
      
       | \e | escape (ESC veya ASCII 27 (0x1B) | 
      
       | \f | sayfa ileri (FF veya ASCII 12 (0x0C)) | 
      
       | \\ | tersbölü | 
      
       | \$ | dolar imi | 
      
       | \" | çift tırnak | 
      
       | \[0-7]{1,3} | Sekizlik: Bu düzenli ifade ile eşleşen dizilim, karakterin sekizlik
        gösterimi (örn, "\101" === "A") olup bir bayta
        sığmak için sessizce taşar (örn,"\400" === "\000"). | 
      
       | \x[0-9A-Fa-f]{1,2} | Onaltılık: Bu düzenli ifade ile eşleşen dizilim, karakterin onaltılık
        gösterimidir (örn, "\x41" === "A"). | 
      
       | \u{[0-9A-Fa-f]+} | Unicode: Bu düzenli ifade ile eşleşen dizilim bir Unicode karakter
        kodu olup, dizeye karakter kodunun UTF-8 gösterimini çıktılar.
        Kod kaşlı ayraçlarla sarmalanmalıdır
        (örn, "\u{41}" === "A"). | 
     
    
   
   
    Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız,
    tersbölü imi karakterle birlikte basılır.
   
   
    Çift tırnaklı dizelerin 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 dizenin 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 dize satırsonu
    karakterinden sonra yer alır. Dizgenin sonunu belirtmek üzere dizenin
    sonuna, baştaki betimleyici konur.
   
   
    Kapanış betimleyicisinin dizeden sonraki satırın başında olması
    gerekmez. Boşluk veya sekme karakterleriyle girintilenebilir. Bu durumda
    girinti miktarı dizedeki tüm satırlardan ayıklanır. PHP 7.3.0 öncesinde
    kapanış betimleyicisinin satırın başında olması
    gerekirdi.
   
   
    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.
   
   
    Örnek 1 - PHP 7.3.0 ve sonrası için Yorumlu Metin örneği
    
<?php
// girintisiz
echo <<<END
      a
     b
    c
\n
END;
// 4 boşluk girintili
echo <<<END
      a
     b
    c
    END;
     
    
Yukarıdaki örneğin PHP 7.3 çıktısı:
 
   
    Kapanış betimleyicisi, dizedeki tüm satırlardan daha uzun girintilenmişse
    ParseError istisnası yavrulanır:
   
   
    Örnek 2 - Kapanış betimleyicisi, dizedeki tüm satırlardan daha uzun girintilenmemeli
    
<?php
echo <<<END
  a
 b
c
   END;
     
    
Yukarıdaki örneğin PHP 7.3 çıktısı:
PHP Parse error:  Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
 
    
   
    Kapanış betimleyicisi ve metin girintilenirken sekmeler kullanılabilir,
    ancak sekmeler ve boşluklar birlikte kullanılmamalıdır. Böyle bir durumda
    ParseError istisnası yavrulanır. Girinti için
    sekmeleri ve boşlukları karıştırmak okunabilirliğe zararlı olduğundan bu
    kısıtlamaya gidilmiştir.
   
   
    Örnek 3 - Kapanış betimleyicisin girintilenirken sekmeler ve boşluklar
     birlikte kullanılmamalı
    
<?php
// Aşağıdaki kod çalışmaz.
// Metin boşluklarla kapanış betimleyici sekmelerle girintilenmiş
{
       echo <<<END
        a
               END;
}
// Metinde boşluk ve sekmelerin karışık kullanımı
{
    echo <<<END
       a
     END;
}
// Kapanış betimleyicide boşluk ve sekmelerin karışık kullanımı
{
       echo <<<END
                 a
                END;
}
     
    
Yukarıdaki örneğin PHP 7.3 çıktısı:
PHP Parse error:  Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
 
    
   
    Kapanış betimleyicisinin noktalı virgül ve satırsonu ile sonlandırılması
    gerekmez. Örneğin PHP 7.3.0 ve sonrasında aşağıdaki gibi bir kod çalışır:
   
   
    Örnek 4 - Kapanış betimleyicisinden sonra devam eden ifade
    
<?php
$values = [<<<END
a
  b
    c
END, 'd e f'];
var_dump($values);
     
    
Yukarıdaki örneğin PHP 7.3 çıktısı:
array(2) {
  [0] =>
  string(11) "a
  b
    c"
  [1] =>
  string(5) "d e f"
}
 
    
   Uyarı
    
     Kapanış betimleyicisi satırın hemen başındaysa başka bir sözcüğün parçası
     olup olmadığında bakılmaksızın kapanış betimleyici olarak ele alınır ve
     ParseError istisnasına sebep olur.
    
    
     Örnek 5 - Metin içindeki kapanış betimleyici dizesi ParseError yavrulatır
     
<?php
$values = [<<<END
a
b
END ING
END, 'd e f'];
      
     
Yukarıdaki örneğin PHP 7.3 çıktısı:
PHP Parse error:  syntax error, unexpected identifier "ING", expecting "]" in example.php on line 6
 
     
    
     Bu sorundan kaçınmak için basit bir kurala uymak yeterlidir:
     betimleyiciyi metin gövdesi içinde görünenlerden seçme..
    
    
   Uyarı
    
     PHP 7.3.0 öncesinde, kapanış betimleyicisinin bulunduğu satırda
     betimleyicinin hemen ardına konan muhtemel bir
     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 macOS 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 6 - PHP 7.3.0 öncesi için geçersiz örnek
     
      
<?php
class foo {
    public $bar = <<<EOT
bar
    EOT;
}
// Betimleyici girintilenmez
?>
      
     
    
     Örnek 7 -  PHP 7.3.0 öncesi için bile geçerli örnek
     
      
<?php
class foo {
    public $bar = <<<EOT
bar
EOT;
}
?>
      
     
    
     Değişken içeren yorumlu  metinler sınıf özelliklerini ilklendirmek için
     kullanılamaz.
    
    
   
    Yorumlu metinler tıpkı çift tırnaklı dizeler 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ı
    dizeler 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 dizelerde dikkate alınması gerekenler yorumlu metinlerde
    de dikkate alınmalıdır.
   
   
    Örnek 8 - Yorumlu metin örneği
    
<?php
$str = <<<EOD
Yorumlu metin sözdizimi
kullanılarak çok sayıda
satıra bölünmüş dize örneği.
EOD;
/* Değişkenlerin de kullanıldığı daha karmaşık bir örnek */
class foo
{
    var $foo;
    var $bar;
    function __construct()
    {
        $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ı: \x41\n
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 bağımsız değişkeninde veri aktarırken de yorumlu metin
    kullanılabilir:
   
   
    Örnek 9 - Bağımsız değişkenlerde yorumlu metin kullanımı
    
<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
     
    
   
    Statik değişkenleri ve sınıf özelliklerini veya
    sabitlerini yorumlu metin sözdizimini kullanarak ilklendirmek mümkündür:
   
   
    Örnek 10 - Statik değer olarak yorumlu metin kullanımı
    
<?php
// Statik 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;
}
?>
     
    
   
    Yorumlu metinlerin açılış betimleyicisi
    seçimlik olarak çift tırnaklarla kapatılabilir:
   
   
    Örnek 11 - Yorumlu metin bildiriminde çift tırnak kullanımı
    
<?php
echo <<<"TIRNAKLI"
Merhaba Dünya!
TIRNAKLI;
?>
     
    
   
  
   Yorumsuz metinler
   
    Yorumlu metinlerin çift tırnaklı dizelere karşılık gelmesi gibi yorumsuz
    metinler de tek tırnaklı dizelere 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 <<<
    dizesini 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 12 - Yorumsuz metin örneği
    
<?php
$str = <<<'EOD'
Yorumlu metin sözdizimi kullanılarak çok sayıda satıra bölünmüş
dize örneği. Tersbölüler daima birebir ele alınır,
örn, \\ and \'
EOD;
     
    
Yukarıdaki örneğin çıktısı:
Yorumlu metin sözdizimi kullanılarak çok sayıda satıra bölünmüş
dize örneği. Tersbölüler daima birebir ele alınır,
örn, \\ and \'
 
    
   
    Örnek 13 - Değişkenli yorumsuz metin örneği
    
<?php
class foo
{
    public $foo;
    public $bar;
    function __construct()
    {
        $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 
    
   
    Örnek 14 - Statik veri örneği
    
<?php
class foo {
    public $bar = <<<'EOT'
bar
EOT;
}
?>
     
    
   
  
   Değişken çözümleme
   
    Bir dize ç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 dize içinde en az çabayla
    kullanmayı sağlar.
   
   
    Karmaşık sözdizimi 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 dizecikleri
     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.
    
    Örnek 15 - Basit sözdizimi örneği
     
<?php
$juices = array("apple", "orange", "koolaid1" => "purple");
echo "He drank some $juices[0] juice.".PHP_EOL;
echo "He drank some $juices[1] juice.".PHP_EOL;
echo "He drank some $juices[koolaid1] juice.".PHP_EOL;
class people {
    public $john = "John Smith";
    public $jane = "Jane Smith";
    public $robert = "Robert Paulsen";
    public $smith = "Smith";
}
$people = new people();
echo "$people->john drank some $juices[0] juice.".PHP_EOL;
echo "$people->john then said hello to $people->jane.".PHP_EOL;
echo "$people->john's wife greeted $people->robert.".PHP_EOL;
echo "$people->robert greeted the two $people->smiths."; // Won't work
?>
      
     
Yukarıdaki örneğin çıktısı:
He drank some apple juice.
He drank some orange juice.
He drank some purple juice.
John Smith drank some apple juice.
John Smith then said hello to Jane Smith.
John Smith's wife greeted Robert Paulsen.
Robert Paulsen greeted the two .
 
    
     PHP 7.1.0 ve sonrasında negatif sayısal indisler
     desteklenir.
    
    Örnek 16 - Negatif sayısal indisler
     
<?php
$string = 'string';
echo "The character at index -2 is $string[-2].", PHP_EOL;
$string[-3] = 'o';
echo "Changing the character at index -3 to o gives $string.", PHP_EOL;
?>
       
     
Yukarıdaki örneğin çıktısı:
The character at index -2 is n.
Changing the character at index -3 to o gives strong.
 
    
     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.
    
    
     Herhangi bir sayıl değer, dizi elemanı veya nesne özelliği bir dize
     içinde bu sözdizimi ile yer alabilir. İfade dize 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ı
     {$ imlerinin kendilerinin alınmasıyla sonuçlanır.
     Bazı örnekler:
    
    
    
     Bu sözdizimini kullanan dizeler içindeki değişkenler üzerinden de sınıf
     özelliklerine erişmek mümkündür.
    
   
    Bilginize: 
     
      {$} içindeki işlev ve yöntem çağrılarından,
      statik sınıf değişkenlerinden ve sınıf sabitlerinden erişilen değer,
      dizenin tanımlandığı etki alanındaki bir değişkenin ismi olarak
      yorumlanır. Kaşlı ayraçların tek başına kullanımı
      ({}), statik 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 ($dize[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: 
    
     PHP 7.1.0 ve sonrasında, negatif dize başlangıçları da desteklenmektedir.
     Öncesinde, bunların okunması boş bir dizeyle ve E_NOTICE
     çıktılanmasıyla, yazılması ise dizenin olduğu gibi bırakılması ve
     E_WARNING çıktılanması ile sonuçlanırdı.
    
   
   Bilginize: 
    
     PHP 8.0.0 öncesinde, dizge karakterlerine ayrıca
     $str{42} biçeminde kaşlı ayraçlar kullanılarak da
     erişilebiliyordu. Bu tür kaşlı ayraç kullanımı PHP 7.4.0 itibariyle
     önerilmemekte olup PHP 8.0.0 ve sonrasında desteklenmemektedir.
    
   
   Uyarı
    
     Karakter indisi olarak dizenin uzunluğundan büyük bir değer belirtmek,
     dizenin sonuna boşlukların eklenmesine sebep olur. Tamsayı olmayan
     indis değerleri tamsayıya dönüştürülür. Kuraldışı indis belirtimi
     E_WARNING'e sebep olur.
     Atanmış bir dizenin sadece ilk karakteri kullanılır.
     PHP 7.1.0 ve sonrasında, boş dize ataması ölümcül hata ile sonuçlanır.
     Evvelce, bir NULL bayt atanırdı.
    
    
   Uyarı
    
     Dahili olarak, PHP dizeleri bayt dizileridir. Sonuç olarak, dizi ayraçları
     kullanarak bir dizeye erişmek ve değişklik yapmak, çok baytlı gösterimde
     güvenli değildir. Bu işlem dizelere sadece ASCII gibi tek baytlık
     kodlamalarda yapılmalıdır.
    
    
   Bilginize: 
    
     PHP 7.1.0 ve sonrasında, boş dize üzerinde boş indis işleci kullanımı
     ölümcül hataya yol açar. Evvelce, boş dize sessizce bir diziye
     dönüştürülürdü.
    
   
   
    Örnek 17 - Bazı dize ö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';
?>
     
    
   
    Dizi başlangıçları ya tamsayı ya da tamsayı benzeri dize olmalıdır,
    aksi takdirde bir uyarı yavrulanır.
   
   
    Örnek 18 - Geçersiz dize başlangıçları örneği
    
<?php
$str = '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']));
?>
     
    
Yukarıdaki örneğin çıktısı:
string(1) "b"
bool(true)
Warning: Illegal string offset '1.0' in /tmp/t.php on line 7
string(1) "b"
bool(false)
Warning: Illegal string offset 'x' in /tmp/t.php on line 9
string(1) "a"
bool(false)
string(1) "b"
bool(false)
 
    
   Bilginize: 
    
     Dize değişmezleri içindeki karakterlere [] veya
     {} kullanılarak erişilebilir.
    
   
   Bilginize: 
    
     {} sözdizimini kullanarak dize değişmezleri içindeki
     karakterlere erişim PHP 7.4'te kullanımdan kaldırılmıştır. PHP 8.0'da
     ise tamemen kaldırılmıştır.