mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
1359 lines
40 KiB
XML
1359 lines
40 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: affa37e16f562d9297e83b2e21ec416aadc8b72d Maintainer: nilgun Status: ready -->
|
||
<sect1 xml:id="language.types.string">
|
||
<title>string</title>
|
||
<para>
|
||
Bir dize <type>string</type> türünde bir sayıl değer olup bir dizi
|
||
tek baytlık karakterden oluşur. Yani, olası karakter sayısı 256'dan
|
||
ibarettir. Bu yüzden PHP Unicode için yerleşik desteğe sahip olamıyor.
|
||
<link linkend="language.types.string.details">Dize türünün ayrıntıları</link>
|
||
belgesine bakınız.
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
32 bitlik derlemelerde, dize uzunluğu en fazla 2GB (2147483647 bayt)
|
||
olabilir.
|
||
</simpara>
|
||
</note>
|
||
|
||
<sect2 xml:id="language.types.string.syntax">
|
||
<title>Sözdizimi</title>
|
||
|
||
<para>
|
||
<type>string</type> türünde bir sayıl dört şekilde belirtilebilir:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
<link linkend="language.types.string.syntax.single">tek tırnaklı dize
|
||
</link>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<link linkend="language.types.string.syntax.double">çift tırnaklı dize
|
||
</link>
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<link linkend="language.types.string.syntax.heredoc">yorumlu metin
|
||
</link> (heredoc)
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<link linkend="language.types.string.syntax.nowdoc">yorumsuz metin
|
||
</link> (nowdoc)
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<sect3 xml:id="language.types.string.syntax.single">
|
||
<title>Tek tırnaklı dizeler</title>
|
||
|
||
<para>
|
||
Bir dizeyi belirtmenin en basit yolu dizeyi tek tırnak
|
||
(<literal>'</literal>) imlerinin arasına almaktır.
|
||
</para>
|
||
|
||
<para>
|
||
Tek tırnaklı bir dize içinde tek tırnağı sayıl değeriyle kullanmak
|
||
isterseniz önüne bir tersbölü imi getirmelisiniz (<literal>\</literal>).
|
||
Bir tersbölü imini sayıl değeriyle kullanmak isterseniz onun da önüne bir
|
||
tersbölü imi getirmelisiniz (<literal>\\</literal>). Tersbölü imini
|
||
bunlardan başka bir karakterin önünde kullanırsanız, tersbölü imi
|
||
karakterle birlikte basılır. <literal>\r</literal> veya
|
||
<literal>\n</literal> gibi özel anlamı olan öncelemeler özel anlamı yoksayılarak olduğu gibi basılır.
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
<link linkend="language.types.string.syntax.double">çift tırnak</link> ve
|
||
<link linkend="language.types.string.syntax.heredoc">yorumlu metin</link>
|
||
sözdizimlerinin aksine, <link linkend="language.variables">değişkenler</link>
|
||
ve özel karakterlerin öncelemleri tek tırnaklı dizelerin içinde
|
||
kullanıldıklarında yorumlanmazlar.
|
||
</simpara>
|
||
</note>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo 'Bu basit bir dizedir';
|
||
|
||
echo 'Dizgelerin içinde satırsonu karakterlerini
|
||
tıpkı buradaki gibi
|
||
kullanabilirsiniz';
|
||
|
||
// Çıktısı: Arnold dedi ki: "I'll be back"
|
||
echo 'Arnold dedi ki: "I\'ll be back"';
|
||
|
||
// Çıktısı: You deleted C:\*.*?
|
||
echo 'You deleted C:\\*.*?';
|
||
|
||
// Çıktısı: You deleted C:\*.*?
|
||
echo 'You deleted C:\*.*?';
|
||
|
||
// Çıktısı: This will not expand: \n a newline
|
||
echo 'This will not expand: \n a newline';
|
||
|
||
// Çıktısı: Variables do not $expand $either
|
||
echo 'Variables do not $expand $either';
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.string.syntax.double">
|
||
<title>Çift tırnaklı dizeler</title>
|
||
|
||
<para>
|
||
Eğer bir dize çift tırnak (") içine alınmışsa PHP, aşağıdaki özel
|
||
karakter öncelemlerini yorumlayacaktır:
|
||
</para>
|
||
|
||
<table>
|
||
<title>Tersbölü ile öncelenmiş karakterler</title>
|
||
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>Öncelem</entry>
|
||
<entry>Anlamı</entry>
|
||
</row>
|
||
</thead>
|
||
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>\n</literal></entry>
|
||
<entry>satırsonu (LF veya ASCII 10 (0x0A))</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\r</literal></entry>
|
||
<entry>satırbaşı (CR veya ASCII 13 (0x0D))</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\t</literal></entry>
|
||
<entry>yatay sekme (HT veya ASCII 9 (0x09))</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\v</literal></entry>
|
||
<entry>düşey sekme (VT veya ASCII 11 (0x0B))</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\e</literal></entry>
|
||
<entry>escape (ESC veya ASCII 27 (0x1B)</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\f</literal></entry>
|
||
<entry>sayfa ileri (FF veya ASCII 12 (0x0C))</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\\</literal></entry>
|
||
<entry>tersbölü</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\$</literal></entry>
|
||
<entry>dolar imi</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\"</literal></entry>
|
||
<entry>çift tırnak</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\[0-7]{1,3}</literal></entry>
|
||
<entry>
|
||
Sekizlik: Bu düzenli ifade ile eşleşen dizilim, karakterin sekizlik
|
||
gösterimi (örn, <literal>"\101" === "A"</literal>) olup bir bayta
|
||
sığmak için sessizce taşar (örn, <literal>"\400" === "\000"</literal>).
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\x[0-9A-Fa-f]{1,2}</literal></entry>
|
||
<entry>
|
||
Onaltılık: Bu düzenli ifade ile eşleşen dizilim, karakterin onaltılık
|
||
gösterimidir (örn, <literal>"\x41" === "A"</literal>).
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>\u{[0-9A-Fa-f]+}</literal></entry>
|
||
<entry>
|
||
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, <literal>"\u{41}" === "A"</literal>).
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
|
||
<para>
|
||
Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız,
|
||
tersbölü imi karakterle birlikte basılır.
|
||
</para>
|
||
|
||
<para>
|
||
Ç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 <link
|
||
linkend="language.types.string.parsing">Değişken çözümleme</link>
|
||
bölümüne bakınız.
|
||
</para>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.string.syntax.heredoc">
|
||
<title>Yorumlu metinler</title>
|
||
|
||
<simpara>
|
||
Bir dizenin sınırlarını belirlemenin üçüncü yolu, <emphasis>yorumlu
|
||
metin</emphasis> sözdizimidir. Bir yorumlu metin daima
|
||
<literal><<<</literal> 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.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
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ı
|
||
<emphasis>gerekirdi</emphasis>.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
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.
|
||
</simpara>
|
||
<example>
|
||
<title>- PHP 7.3.0 ve sonrası için Yorumlu Metin örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// girintisiz
|
||
echo <<<END
|
||
a
|
||
b
|
||
c
|
||
\n
|
||
END;
|
||
|
||
// 4 boşluk girintili
|
||
echo <<<END
|
||
a
|
||
b
|
||
c
|
||
END;
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.73;
|
||
<screen>
|
||
<![CDATA[
|
||
a
|
||
b
|
||
c
|
||
|
||
a
|
||
b
|
||
c
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
Kapanış betimleyicisi, dizedeki tüm satırlardan daha uzun girintilenmişse
|
||
<classname>ParseError</classname> istisnası yavrulanır:
|
||
</simpara>
|
||
|
||
<example>
|
||
<title>- Kapanış betimleyicisi, dizedeki tüm satırlardan daha uzun girintilenmemeli</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo <<<END
|
||
a
|
||
b
|
||
c
|
||
END;
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.73;
|
||
<screen>
|
||
<![CDATA[
|
||
PHP Parse error: Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
Kapanış betimleyicisi ve metin girintilenirken sekmeler kullanılabilir,
|
||
ancak sekmeler ve boşluklar birlikte kullanılmamalıdır. Böyle bir durumda
|
||
<classname>ParseError</classname> istisnası yavrulanır. Girinti için
|
||
sekmeleri ve boşlukları karıştırmak okunabilirliğe zararlı olduğundan bu
|
||
kısıtlamaya gidilmiştir.
|
||
</simpara>
|
||
|
||
<example>
|
||
<title>- Kapanış betimleyicisin girintilenirken sekmeler ve boşluklar
|
||
birlikte kullanılmamalı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
}
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.73;
|
||
<screen>
|
||
<![CDATA[
|
||
PHP Parse error: Invalid indentation - tabs and spaces cannot be mixed in example.php line 8
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
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:
|
||
</simpara>
|
||
|
||
<example>
|
||
<title>- Kapanış betimleyicisinden sonra devam eden ifade</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$values = [<<<END
|
||
a
|
||
b
|
||
c
|
||
END, 'd e f'];
|
||
var_dump($values);
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.73;
|
||
<screen>
|
||
<![CDATA[
|
||
array(2) {
|
||
[0] =>
|
||
string(11) "a
|
||
b
|
||
c"
|
||
[1] =>
|
||
string(5) "d e f"
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<warning>
|
||
<simpara>
|
||
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
|
||
<classname>ParseError</classname> istisnasına sebep olur.
|
||
</simpara>
|
||
|
||
<example>
|
||
<title>- Metin içindeki kapanış betimleyici dizesi ParseError yavrulatır</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$values = [<<<END
|
||
a
|
||
b
|
||
END ING
|
||
END, 'd e f'];
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.73;
|
||
<screen>
|
||
<![CDATA[
|
||
PHP Parse error: syntax error, unexpected identifier "ING", expecting "]" in example.php on line 6
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
Bu sorundan kaçınmak için basit bir kurala uymak yeterlidir:
|
||
<emphasis>betimleyiciyi metin gövdesi içinde görünenlerden seçme.</emphasis>.
|
||
</simpara>
|
||
</warning>
|
||
|
||
<warning>
|
||
<simpara>
|
||
PHP 7.3.0 öncesinde, kapanış betimleyicisinin bulunduğu satırda
|
||
betimleyicinin hemen ardına konan <emphasis>muhtemel</emphasis> bir
|
||
noktalı virgül (<literal>;</literal>) dışında hiçbir karakter
|
||
bulunmaması çok önemli olup buna özellikle dikkat etmelisiniz. Yani,
|
||
betimleyici özellikle <emphasis>girintilenmemeli</emphasis>; 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 <literal>\n</literal>'dir. Kapanış
|
||
betimleyicisinden (ve olası noktalı virgül karakterinden) sonraki
|
||
karakter de böyle bir satırsonu karakteri olmalıdır.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
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.
|
||
</simpara>
|
||
|
||
<para>
|
||
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
|
||
<link linkend="language.types.string.syntax.nowdoc">yorumsuz metinler
|
||
</link>kullanılabilir.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- PHP 7.3.0 öncesi için geçersiz örnek</title>
|
||
<programlisting role="php">
|
||
<!-- This is an INVALID example -->
|
||
<![CDATA[
|
||
<?php
|
||
class foo {
|
||
public $bar = <<<EOT
|
||
bar
|
||
EOT;
|
||
}
|
||
// Betimleyici girintilenmez
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
<example>
|
||
<title>- PHP 7.3.0 öncesi için bile geçerli örnek</title>
|
||
<programlisting role="php">
|
||
<!-- This is a VALID example -->
|
||
<![CDATA[
|
||
<?php
|
||
class foo {
|
||
public $bar = <<<EOT
|
||
bar
|
||
EOT;
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Değişken içeren yorumlu metinler sınıf özelliklerini ilklendirmek için
|
||
kullanılamaz.
|
||
</para>
|
||
</warning>
|
||
|
||
<para>
|
||
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.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Yorumlu metin örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
Adım "Kimimben" ve işim Foo basmak.
|
||
Şimdi Bar2 basıyorum.
|
||
Bu büyük 'A' basmalı: A]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<para>
|
||
Ayrıca işlev bağımsız değişkeninde veri aktarırken de yorumlu metin
|
||
kullanılabilir:
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Bağımsız değişkenlerde yorumlu metin kullanımı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
var_dump(array(<<<EOD
|
||
foobar!
|
||
EOD
|
||
));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Statik değişkenleri ve sınıf özelliklerini veya
|
||
sabitlerini yorumlu metin sözdizimini kullanarak ilklendirmek mümkündür:
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Statik değer olarak yorumlu metin kullanımı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Yorumlu metinlerin açılış betimleyicisi
|
||
seçimlik olarak çift tırnaklarla kapatılabilir:
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Yorumlu metin bildiriminde çift tırnak kullanımı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
echo <<<"TIRNAKLI"
|
||
Merhaba Dünya!
|
||
TIRNAKLI;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.string.syntax.nowdoc">
|
||
<title>Yorumsuz metinler</title>
|
||
|
||
<para>
|
||
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, <emphasis>yorumsuz metin içinde çözümleme
|
||
yapılmaz</emphasis>. 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 <literal><![CDATA[ ]]></literal> oluşumu ile benzer
|
||
özelliklere sahiptir.
|
||
</para>
|
||
|
||
<para>
|
||
Yorumsuz metin de yorumlu metindeki <literal><<<</literal>
|
||
dizesini kullanır fakat betimleyicisi tek tırnak içine alınır; yani,
|
||
şuna benzer: <literal><<<'EOT'</literal>. 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.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Yorumsuz metin örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
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 \'
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Değişkenli yorumsuz metin örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
İsmim "$name" ve işim $foo->foo basmak.
|
||
Artık {$foo->bar[1]} basıyorum.
|
||
Bu büyük 'A' basmalı: \x41]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Statik veri örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class foo {
|
||
public $bar = <<<'EOT'
|
||
bar
|
||
EOT;
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.string.parsing">
|
||
<title>Değişken çözümleme</title>
|
||
|
||
<simpara>
|
||
Bir dize çift tırnaklar arasında veya bir yorumlu metin olarak
|
||
belirtilmişse içindeki <link linkend="language.variables"
|
||
>değişkenler</link> çözümlenir.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
İki sözdizimi türü vardır: Biri <link
|
||
linkend="language.types.string.parsing.simple">basit</link>, diğeri <link
|
||
linkend="language.types.string.parsing.complex">karmaşık</link>. 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.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Karmaşık sözdizimi ifadeyi sarmalayan kaşlı ayraçlar biçiminde kendini
|
||
gösterir.
|
||
</simpara>
|
||
|
||
<sect4 xml:id="language.types.string.parsing.simple">
|
||
<title>Basit Sözdizimi</title>
|
||
|
||
<simpara>
|
||
Çözümleyici, bir dolar imine (<literal>$</literal>) 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.
|
||
</simpara>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$juice = "apple";
|
||
|
||
echo "He drank some $juice juice.".PHP_EOL;
|
||
|
||
// "s" değişken ismi olarak geçerli karakterdir fakat, $juice değişkendir.
|
||
echo "He drank some juice made of $juices.";
|
||
|
||
// Kaşlı ayraçların içine alınarak değişken isminin bitimi açıkça belirtilmiş
|
||
echo "He drank some juice made of ${juice}s.";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
He drank some apple juice.
|
||
He drank some juice made of .
|
||
He drank some juice made of apples.
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
|
||
<simpara>
|
||
Bir dizi indisi veya bir nesne özelliği de benzer şekilde
|
||
çözümlenebilir. Dizi indislerinde indis sonunu, kapayan köşeli ayraç
|
||
(<literal>]</literal>) belirler. Aynı kural, basit değişkenler olarak
|
||
nesne özelliklerine de uygulanır.
|
||
</simpara>
|
||
|
||
<example><title>- Basit sözdizimi örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
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 .
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
PHP 7.1.0 ve sonrasında <emphasis>negatif</emphasis> sayısal indisler
|
||
desteklenir.
|
||
</simpara>
|
||
|
||
<example><title>- Negatif sayısal indisler</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
The character at index -2 is n.
|
||
Changing the character at index -3 to o gives strong.
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<simpara>
|
||
Bunlardan daha karmaşık herşey için karmaşık sözdizimini kullanmalısınız.
|
||
</simpara>
|
||
</sect4>
|
||
|
||
<sect4 xml:id="language.types.string.parsing.complex">
|
||
<title>Karmaşık (kaşlı ayraçlı) sözdizimi</title>
|
||
|
||
<simpara>
|
||
Buna karmaşık denmesinin sebebi sözdiziminin karmaşıklığı değil,
|
||
karmaşık ifadelerin kullanımını mümkün kılmasıdır.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
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 <literal>{</literal> ve <literal>}</literal> arasına alınır.
|
||
<literal>{</literal> öncelenemeyeceğinden bu sözdizimi sadece
|
||
<literal>$</literal> iminin <literal>{</literal> iminin hemen ardında
|
||
yer aldığı durumlarda tanınır. <literal>{\$</literal> kullanımı
|
||
<literal>{$</literal> imlerinin kendilerinin alınmasıyla sonuçlanır.
|
||
Bazı örnekler:
|
||
</simpara>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Tüm hataları görelim
|
||
error_reporting(E_ALL);
|
||
|
||
$şahane = 'harika';
|
||
|
||
// Çalışmaz, çıktısı: Bu çok { harika}
|
||
echo "Bu çok { $şahane}";
|
||
|
||
// Çalışır, çıktısı: Bu çok harika
|
||
echo "Bu çok {$şahane}";
|
||
|
||
// Çalışır
|
||
echo "Bu karenin bir kenarı {$square->width}00 santimetre uzunluktadır.";
|
||
|
||
// Çalışır, tırnaklı anahtarlar sadece kaşlı ayraç sözdizimi kullanılarak çalışır
|
||
echo "Bu çalışır: {$arr['key']}";
|
||
|
||
|
||
// Çalışır
|
||
echo "Bu çalışır: {$arr[4][3]}";
|
||
|
||
// $foo[bar] bir dize dışında neden yanlışsa bu da o yüzden yanlıştır.
|
||
// PHP önce foo adında bir sabit arar, bulamazsa hata oluşur.
|
||
// Sabit bulunursa, değeri (foo'nun kendisi değil) dizi indisinde kullanılır.
|
||
echo "Bu yanlış: {$arr[foo][3]}";
|
||
|
||
// Çalışır. Çok boyutlu dizileri dizelerin içinde kullanılırken,
|
||
// dizileri daima kaşlı ayraçlar arasına alın.
|
||
echo "Bu çalışır: {$arr['foo'][3]}";
|
||
|
||
// Çalışır.
|
||
echo "Bu çalışır: " . $arr['foo'][3];
|
||
|
||
echo "Bu da çalışır: {$obj->values[3]->name}";
|
||
|
||
echo "$name adlı değişkenin değeri: {${$name}}";
|
||
|
||
echo "Adı getName() işlevinin dönüş değeri olan değişkenin değeri: {${getName()}}";
|
||
|
||
echo "Adı \$object->getName() yönteminin dönüş değeri olan değişkenin değeri: {${$object->getName()}}";
|
||
|
||
// Çalışmaz, çıktısı: This is the return value of getName(): {getName()}
|
||
echo "This is the return value of getName(): {getName()}";
|
||
|
||
// Çalışmaz, çıktısı: C:\folder\{harika}.txt
|
||
echo "C:\folder\{$şahane}.txt"
|
||
// Çalışır, çıktısı: C:\folder\harika.txt
|
||
echo "C:\\folder\\{$şahane}.txt"
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
|
||
<para>
|
||
Bu sözdizimini kullanan dizeler içindeki değişkenler üzerinden de sınıf
|
||
özelliklerine erişmek mümkündür.
|
||
</para>
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class foo {
|
||
var $bar = 'I am bar.';
|
||
}
|
||
|
||
$foo = new foo();
|
||
$bar = 'bar';
|
||
$baz = array('foo', 'bar', 'baz', 'quux');
|
||
echo "{$foo->$bar}\n";
|
||
echo "{$foo->{$baz[1]}}\n";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
I am bar.
|
||
I am bar.
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
|
||
<note>
|
||
<para>
|
||
<literal>{$}</literal> 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ı
|
||
(<literal>{}</literal>), 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.
|
||
</para>
|
||
</note>
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Tüm hatalar gösterilsin.
|
||
error_reporting(E_ALL);
|
||
|
||
class beers {
|
||
const softdrink = 'rootbeer';
|
||
public static $ale = 'ipa';
|
||
}
|
||
|
||
$rootbeer = 'A & W';
|
||
$ipa = 'Alexander Keith\'s';
|
||
|
||
// Bu çalışır; çıktısı: I'd like an A & W
|
||
echo "I'd like an {${beers::softdrink}}\n";
|
||
|
||
// Bu da çalışır; çıktısı: I'd like an Alexander Keith's
|
||
echo "I'd like an {${beers::$ale}}\n";
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
|
||
</sect4>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.string.substr">
|
||
<title>Dizge erişimi ve karaktere göre değişiklik</title>
|
||
|
||
<para>
|
||
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 <function>substr</function> ve
|
||
<function>substr_replace</function> işlevlerini kullanabilirsiniz.
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
PHP 7.1.0 ve sonrasında, negatif dize başlangıçları da desteklenmektedir.
|
||
Öncesinde, bunların okunması boş bir dizeyle ve <constant>E_NOTICE</constant>
|
||
çıktılanmasıyla, yazılması ise dizenin olduğu gibi bırakılması ve
|
||
<constant>E_WARNING</constant> çıktılanması ile sonuçlanırdı.
|
||
</simpara>
|
||
</note>
|
||
|
||
<note>
|
||
<simpara>
|
||
PHP 8.0.0 öncesinde, dizge karakterlerine ayrıca
|
||
<varname>$str{42}</varname> 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.
|
||
</simpara>
|
||
</note>
|
||
|
||
<warning>
|
||
<simpara>
|
||
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
|
||
<constant>E_WARNING</constant>'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ı.
|
||
</simpara>
|
||
</warning>
|
||
|
||
<warning>
|
||
<simpara>
|
||
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.
|
||
</simpara>
|
||
</warning>
|
||
|
||
<note>
|
||
<simpara>
|
||
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ü.
|
||
</simpara>
|
||
</note>
|
||
|
||
<example>
|
||
<title>- Bazı dize örnekleri</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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';
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
|
||
<para>
|
||
Dizi başlangıçları ya tamsayı ya da tamsayı benzeri dize olmalıdır,
|
||
aksi takdirde bir uyarı yavrulanır.
|
||
</para>
|
||
|
||
<example>
|
||
<title>- Geçersiz dize başlangıçları örneği</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?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']));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
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)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<note>
|
||
<para>
|
||
Dize değişmezleri içindeki karakterlere <literal>[]</literal> veya
|
||
<literal>{}</literal> kullanılarak erişilebilir.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
<literal>{}</literal> 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.
|
||
</para>
|
||
</note>
|
||
</sect3>
|
||
</sect2><!-- end syntax -->
|
||
|
||
<sect2 xml:id="language.types.string.useful-funcs">
|
||
<title>Kullanışlı işlevler ve işleçler</title>
|
||
|
||
<para>
|
||
Dizgeler '.' (nokta) işleci kullanılarak ardarda eklenebilir. '+'
|
||
(toplama) işlecinin bu amaçla kullanımının yararsız oluşuna dikkat ediniz.
|
||
Daha ayrıntılı bilgi edinmek için <link
|
||
linkend="language.operators.string">Dizge İşleçleri</link> belgesine
|
||
bakınız.
|
||
</para>
|
||
|
||
<para>
|
||
Dizgelerde değişiklik yapmak için çok sayıda yararlı işlev mevcuttur.
|
||
</para>
|
||
|
||
<simpara>
|
||
Genel işlevler için <link linkend="ref.strings">Dize İşlevleri</link>ne,
|
||
ileri düzey bul ve değiştir işlevselliği için <link
|
||
linkend="ref.pcre">Perl uyumlu düzenli ifade işlevleri</link>ne bakınız.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Ayrıca, <link linkend="ref.url">URL dizeleri için işlevler</link> ve
|
||
dizeleri şifrelemek veya şifrelerini çözmek için
|
||
<link linkend="ref.sodium">Sodium</link> ve
|
||
<link linkend="ref.hash">Hash</link> işlevleri vardır.
|
||
</simpara>
|
||
|
||
<simpara>
|
||
Son olarak, <link linkend="ref.ctype">karakter türü işlevleri</link>ne de
|
||
bakabilirsiniz.
|
||
</simpara>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.string.casting">
|
||
<title>Dizgeye dönüşüm</title>
|
||
|
||
<para>
|
||
Bir değer bir dizeye <literal>(string)</literal> tür çarpıtması veya
|
||
<function>strval</function> işleviyle dönüştürülür. Bir dizenin gerekli
|
||
olduğu ifade bağlamlarında dizeye dönüşüm otomatik olarak gerçekleşir.
|
||
Bu genellikle, <function>echo</function> veya <function>print</function>
|
||
işlevleri kullanılırken veya bir değişken bir dize ile karşılaştırılırken
|
||
gerçekleşir. Aşağıdakilere, <link linkend="language.types">Türler</link>
|
||
ve <link linkend="language.types.type-juggling">Tür Dönüşümü</link>
|
||
bölümlerinde daha ayrıntılı değinilmiştir. Ayrıca,
|
||
<function>settype</function> işlevine de bakabilirsiniz.
|
||
</para>
|
||
|
||
<para>
|
||
<type>bool</type> türündeki &true; değeri <type>string</type>
|
||
türündeki <literal>"1"</literal> değerine dönüştürülür.
|
||
<type>bool</type> türündeki &false; değeri <type>string</type>
|
||
türündeki <literal>""</literal> değerine (boş dizeye) dönüştürülür. Bu
|
||
şekilde, <type>bool</type> ve <type>string</type> değerler arasında
|
||
her iki yönde de dönüşüm yapılabilmektedir.
|
||
</para>
|
||
|
||
<para>
|
||
<type>integer</type> veya <type>float</type> türünde bir değerin
|
||
<type>string</type> türüne dönüşümü sayının dizesel gösterimiyle (üstel
|
||
gösterim dahil) sonuçlanır. Kayan noktalı sayılar üstel gösterim
|
||
kullanılarak dönüştürülebilir (<literal>4.1E+6</literal> gibi).
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
PHP 8.0.0 itibariyle, ondalık nokta karakteri daima
|
||
noktadır ("<literal>.</literal>"). PHP 8.0.0 öncesinde
|
||
betiğin çalıştığı yerele (LC_NUMERIC) özgüdür.
|
||
Bakınız: <function>setlocale</function> işlevi.
|
||
</para>
|
||
</note>
|
||
|
||
<para>
|
||
Diziler daima <literal>"Array"</literal> dizesine dönüştürülür; bundan
|
||
dolayı <function>echo</function> ve <function>print</function> bir dizinin
|
||
içeriğini kendiliklerinden gösteremezler. Tek bir dizi elemanını
|
||
görüntüleyebilmek için <literal>echo $arr['foo']</literal> 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.
|
||
</para>
|
||
|
||
<para>
|
||
<type>object</type> türleri <type>string</type> türüne dönüştürmek için
|
||
<link linkend="language.oop5.magic">__toString</link> sihirli yöntemi
|
||
kullanılmalıdır.
|
||
</para>
|
||
|
||
<para>
|
||
<type>resource</type> türler daima <literal>"Resource id #1"</literal>
|
||
benzeri bir dizeye dönüştürülürler; buradaki <literal>1</literal>,
|
||
özkaynağa PHP tarafından çalışma anında atanan eşsiz bir sayıdır.
|
||
Bu dizenin tam yapısı değişikliğe konu olduğundan güvenilmemelidir ve değişime
|
||
tabi tutulmalıdır. Çalıştırılan bir betiğin (bir sayfa isteği veya CLI işlemi)
|
||
ömrü boyunca, belirli bir özkaynak için daima benzersiz olacak ve yeniden
|
||
kullanılabilir olmayacaktır. Özkaynağın türünü
|
||
öğrenmek için <function>get_resource_type</function> işlevini kullanınız.
|
||
</para>
|
||
|
||
<para>
|
||
&null; daima boş bir dizeye dönüştürülür.
|
||
</para>
|
||
|
||
<para>
|
||
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
|
||
<function>print_r</function> ve <function>var_dump</function> işlevlerine
|
||
bakınız.
|
||
</para>
|
||
|
||
<para>
|
||
Çoğu PHP değeri kalıcı olarak saklamak amacıyla dizelere
|
||
dönüştürülebilir. Bu yönteme dizeleştirme adı verilir ve
|
||
<function>serialize</function> işlevi tarafından gerçekleştirilir.
|
||
</para>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.string.details">
|
||
<title>String Türü ve Ayrıntılar</title>
|
||
|
||
<para>
|
||
PHP'de <type>string</type> türü bir bayt dizisi ve tampon uzumlığunu
|
||
belirten bir tamsayı olarak gerçeklenmiştir. Bu baytların nasıl
|
||
karakterlere dönüştüğü hakkında bir bilgiye sahip değildir, bu görev
|
||
yazılımcıya bırakılmıştır. Bir dizeyi oluşturan değerlerle ilgili bir
|
||
sınırlama yoktur. Özellikle <literal>0</literal> değerli baytlara (NUL
|
||
baytlar) dizenin her yerinde izin verilir. (Bununla birlikte, bu kılavuzda
|
||
"ikil olarak güvenli" olmadığı belirtilen bir kaç işlev, dizeleri, NULL
|
||
baytından sonra verileri yok sayan kitaplıklara dağıtabilir.)
|
||
</para>
|
||
<para>
|
||
<type>string</type> türünün bu doğası, PHP'de neden ayrı bir bayt türünün
|
||
olmadığını açıklar; bu rolü dizeler üstlenir. Örneğin metin veri
|
||
döndürmeyen işlevler, ham veriyi bir ağ soketinden okuyup yine de dize
|
||
döndürecektir.
|
||
</para>
|
||
<para>
|
||
PHP dizelere belli bir karakter kodlaması dayatmaz, dizelerin nasıl
|
||
baytlara dönüştüğü merak edilebilir. Örneğin, <literal>"á"</literal>
|
||
dizesi <literal>"\xE1"</literal> (ISO-8859-1),
|
||
<literal>"\xC3\xA1"</literal> (UTF-8, C form),
|
||
<literal>"\x61\xCC\x81"</literal> (UTF-8, D form) olarak mı yoksa olası
|
||
başka bir gösterime göre mi kodlanacak? Bunun yanıtı, betiğin karakter
|
||
kodlaması neyse ona göre karakterler kodlanır, olacaktır. Bu bakımdan,
|
||
betik örneğin ISO-8859-1'de yazılmışsa dize de ISO-8859-1'de kodlanacaktır.
|
||
Ancak, Zend Çokbaytlılık etkinse bu uygulanmaz; bu durumda betik keyfi bir
|
||
kodlamada (açıkça belirtilmiş veya algılanmış olabilir) yazılabilir ve
|
||
ardından belli bir dahili kodlamaya (dizeler için kullanılacak kodlama)
|
||
dönüştürülebilir. Betiğin kodlanmasında (veya dahili kodlamada, Zend
|
||
Çokbaytlılık etkin olmalıdır) bazı kısıtlamalar olduğunu unutmayın.
|
||
Bu hemen hemen her zaman, bu kodlamanın UTF-8 veya ISO-8859-1 gibi
|
||
ASCII'nin uyumlu bir üst kümesi olması gerektiği anlamına gelir. Bununla
|
||
birlikte, büyük/küçük harf durumlarında aynı bayt değerlerinin
|
||
kullanılabildiği durum bağımlı kodlamaların sorunlu olabileceğini unutmayın.
|
||
</para>
|
||
<para>
|
||
Şüphesiz, kullanışlı olmak noktasında, metinler üzerinde çalışan işlevler
|
||
dizenin nasıl kodlanacağına ilşkin bazı varsayımlarda bulunabilir.
|
||
Ne yazık ki, işlevler arasında bu konuda çok farklı varsayımlar mevcuttur:
|
||
</para>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Bazı işlevler dizenin tek baytlı bir kodlamayla kodlanacağını varsayar,
|
||
fakat bu baytları belli karakterlere yorumlama gereği duymazlar.
|
||
<function>substr</function>, <function>strpos</function>,
|
||
<function>strlen</function> ve <function>strcmp</function> işlevleri bu
|
||
durumdadır. Bu işlevlerin bellek tamponlarında, yani baytlar ve bayt
|
||
adresleriyle çalıştıkları için böyle oldukları düşünülebilir.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Diğer bir işlev grubu, dizgenin kodlamasının aktarıldığını ya da bir
|
||
öntanımlı kodlamanın olduğunu varsayar.
|
||
<link linkend="book.mbstring">mbstring</link> eklentisindeki işlevler
|
||
ve <function>htmlentities</function> böyledir.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Bir başka işlev grubu geçerli yereli kullanır (bak
|
||
<function>setlocale</function>), fakat bayt bayt çalışır.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
Son grup, dizenin belli bir kodlamayı, normal olarak UTF-8 kullandığını
|
||
varsayar. <link linkend="book.intl">intl</link> ve
|
||
<link linkend="book.pcre">PCRE</link> eklentilerindeki işlevlerin çoğu
|
||
böyledir (PCRE eklentilerindeki işlevlerde sadece <literal>u</literal>
|
||
değiştircisi kullanıldığında).
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
Sonuç olarak, Unicode kullanarak doğru programların yazılması, çalışmayan
|
||
ve büyük olasılıkla verileri bozacak işlevlerden itinayla kaçınmaya ve
|
||
bunun yerine doğru davranan, genellikle <link linkend="book.intl">intl</link>
|
||
ve <link linkend="book.mbstring">mbstring</link> eklentilerindeki işlevleri
|
||
kullanmaya bağlıdır. Bununla birlikte, Unicode kodlamaları işleyebilen
|
||
işlevleri kullanmak sadece başlangıçtır. Dilin sağladığı işlevler ne olursa
|
||
olsun, asıl olan Unicode belirtimini bilmektir. Örneğin, sadece büyük ve
|
||
küçük harfler olduğunu varsayan bir yazılım yanlış kabul yapıyor demektir.
|
||
</para>
|
||
</sect2>
|
||
</sect1><!-- end string -->
|
||
|
||
<!-- Keep this comment at the end of the file
|
||
Local variables:
|
||
mode: sgml
|
||
sgml-omittag:t
|
||
sgml-shorttag:t
|
||
sgml-minimize-attributes:nil
|
||
sgml-always-quote-attributes:t
|
||
sgml-indent-step:1
|
||
sgml-indent-data:t
|
||
indent-tabs-mode:nil
|
||
sgml-parent-document:nil
|
||
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
||
sgml-exposed-tags:nil
|
||
sgml-local-catalogs:nil
|
||
sgml-local-ecat-files:nil
|
||
End:
|
||
vim600: syn=xml fen fdm=syntax fdl=2 si
|
||
vim: et tw=78 syn=sgml
|
||
vi: ts=1 sw=1
|
||
-->
|