mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
328 lines
8.7 KiB
XML
328 lines
8.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: cdc9d28d334bbc08386fecf8aade66080004a9dd Maintainer: nilgun Status: ready -->
|
||
<sect1 xml:id="control-structures.switch" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||
<title>switch</title>
|
||
<?phpdoc print-version-for="switch"?>
|
||
<simpara>
|
||
<literal>switch</literal> deyimi, aynı ifade içersinde yer alan bir dizi
|
||
IF deyimine benzer. Birçok durumda, aynı değişkeni (ya da ifadeyi)
|
||
birden çok değerle karşılaştırmak ve her karşılaştırmanın sonucunu
|
||
ayrı bir kod parçası çalıştırarak değerlendirmek istersiniz. İşte bu,
|
||
<literal>switch</literal> deyiminin varlık sebebidir.
|
||
</simpara>
|
||
<note>
|
||
<simpara>
|
||
Başka bazı dillerden farklı olarak, <link
|
||
linkend="control-structures.continue">continue</link> deyimi
|
||
<literal>switch</literal> ile uygulanabilir ve
|
||
<literal>break</literal> ile benzerlik gösterir. Bir döngü içerisinde
|
||
<literal>switch</literal> kullandıysanız ve kodun yürütülmesine
|
||
dıştaki döngünün sonraki yinelemeden devam etmesini istiyorsanız,
|
||
<literal>continue 2</literal> kullanabilirsiniz.
|
||
</simpara>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
<literal>switch</literal> ve <literal>case</literal>
|
||
<link linkend="types.comparisions-loose">gevşek karşılaştırma</link>
|
||
yapar.
|
||
</para>
|
||
</note>
|
||
<para>
|
||
Aşağıdaki iki örnek aynı şeyi yazmanın iki farklı yolunu göstermektedir.
|
||
Birincisi bir dizi <literal>if</literal> ve <literal>elseif</literal>
|
||
deyiminin kullanımını, ikincisi ise <literal>switch</literal> deyiminin
|
||
kullanımını örneklemektedir:
|
||
<example>
|
||
<title>- <code>switch</code> yapısı</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
// Bu switch deyimi:
|
||
|
||
switch ($i) {
|
||
case 0:
|
||
echo "i eşittir 0";
|
||
break;
|
||
case 1:
|
||
echo "i eşittir 1";
|
||
break;
|
||
case 2:
|
||
echo "i eşittir 2";
|
||
break;
|
||
}
|
||
|
||
// bunlara eşdeğerdir:
|
||
|
||
if ($i == 0) {
|
||
echo "i eşittir 0";
|
||
} elseif ($i == 1) {
|
||
echo "i eşittir 1";
|
||
} elseif ($i == 2) {
|
||
echo "i eşittir 2";
|
||
}
|
||
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
<para>
|
||
Hatalardan kaçınmak için <literal>switch</literal> deyiminin nasıl
|
||
çalıştığını anlamak önemlidir. <literal>switch</literal> deyimi satır
|
||
satır ele alınır (aslında deyim deyim). Başlangıçta, hiçbir kod
|
||
çalıştırılmaz. Yalnızca <literal>switch</literal> ifadesiyle birlikte
|
||
verilen değer ile uyuşan <literal>case</literal> deyimi bulunduğunda PHP
|
||
ilgili deyimleri çalıştırmaya başlar. PHP <literal>switch</literal>
|
||
bloğu sonlanana kadar ya da ilk <literal>break</literal> deyimi ile
|
||
karşılaşıncaya kadar çalışmasına devam eder. Bir case bloğunun sonuna
|
||
<literal>break</literal> koymazsanız, PHP sonraki
|
||
<literal>case</literal> deyiminden kodları çalıştırmaya devam eder.
|
||
Örnek:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
switch ($i) {
|
||
case 0:
|
||
echo "i eşittir 0";
|
||
case 1:
|
||
echo "i eşittir 1";
|
||
case 2:
|
||
echo "i eşittir 2";
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<simpara>
|
||
Burada, <varname>$i</varname> 0'a eşit ise, PHP tüm
|
||
<literal>echo</literal> deyimlerini çalıştıracaktır!
|
||
<varname>$i</varname> 1'e eşit ise, PHP son iki <literal>echo</literal>
|
||
deyimini çalıştıracaktır! Beklediğiniz sonucu ('i eşittir 2' metninin
|
||
görüntülenmesi) yalnızca <varname>$i</varname> 2'ye eşitse almanız
|
||
mümkün olacaktır. Bu durumun oluşmaması için, <literal>break</literal>
|
||
deyimini kullanmayı unutmamanız önemlidir (yine de, bazı durumlarda
|
||
<literal>break</literal> deyimini kullanmak istemeyebilirsiniz).
|
||
</simpara>
|
||
<simpara>
|
||
Bir <literal>switch</literal> deyiminde, koşul yalnızca bir defa
|
||
sorgulanır ve sonuç her bir <literal>case</literal> deyimi ile
|
||
karşılaştırılır. Bir <literal>elseif</literal> deyiminde ise, koşul
|
||
tekrar sorgulanır. Kullanmak istediğiniz koşul basit bir karşılaştırma
|
||
işleminden daha karmaşıksa ve/veya bir döngü içerisindeyse,
|
||
<literal>switch</literal> kullanmak daha hızlı olabilir.
|
||
</simpara>
|
||
<para>
|
||
<literal>case</literal> bloğu kod içermeyebilir ve amacı yalnızca
|
||
denetimi bir sonraki <literal>case</literal> bloğuna geçirmek olabilir.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
switch ($i) {
|
||
case 0:
|
||
case 1:
|
||
case 2:
|
||
echo "i 3'ten küçüktür ama negatif değildir";
|
||
break;
|
||
case 3:
|
||
echo "i eşittir 3";
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
<literal>default</literal> durumu özel bir durumdur. Bu durum diğer
|
||
hiçbir <literal>case</literal> ile uyuşmayan değerler için kullanılır ve
|
||
en sonda yer almalıdır. Örneğin:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
switch ($i) {
|
||
case 0:
|
||
echo "i eşittir 0";
|
||
break;
|
||
case 1:
|
||
echo "i eşittir 1";
|
||
break;
|
||
case 2:
|
||
echo "i eşittir 2";
|
||
break;
|
||
default:
|
||
echo "i ne 0, ne 1 ne de 2'ye eşittir";
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<note>
|
||
<simpara>
|
||
Çok sayıda <literal>default</literal> kullanımı
|
||
<constant>E_COMPILE_ERROR</constant> hatasını tetikler.
|
||
</simpara>
|
||
</note>
|
||
<note>
|
||
<simpara>
|
||
Teknik olarak <literal>default</literal> en sonda olmak zorunda değildir,
|
||
herhangi bir yerde olabilir. Yanızca başka bir eşleşme olmazsa kullanılır.
|
||
Ancak, geleneksel olarak, son dal olarak en sona yerleştirmek en iyisidir.
|
||
</simpara>
|
||
</note>
|
||
<para>
|
||
Hiçbir <literal>case</literal> eşleşmezse ve <literal>default</literal>
|
||
dalı da yoksa tıpkı doğrulanmayan <literal>if</literal> deyiminde olduğu
|
||
gibi hiçbir kod çalıştırılmaz.
|
||
</para>
|
||
<para>
|
||
<literal>case</literal> değeri bir ifade olarak belirtilebilir. Ancak, bu
|
||
ifade kendi başına değerlendirilecek ve daha sonra <literal>switch</literal>
|
||
değeri ile gevşek bir şekilde karşılaştırılacaktır.
|
||
Yani, <literal>switch</literal> değeri karmaşık değerlendirmeler için
|
||
kullanılamaz. Örnek:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$hedef = 1;
|
||
$ilk = 3;
|
||
|
||
switch ($hedef) {
|
||
case $ilk - 1:
|
||
print "A";
|
||
break;
|
||
case $ilk - 2:
|
||
print "B";
|
||
break;
|
||
case $ilk - 3:
|
||
print "C";
|
||
break;
|
||
case $ilk - 4:
|
||
print "D";
|
||
break;
|
||
}
|
||
|
||
// "B" basar.
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
Daha karmaşık karşılaştırmalarda &true; değeri
|
||
<literal>switch</literal> değeri olarak kullanılabilir. Veya,
|
||
<literal>switch</literal> yerine <literal>if</literal>-<literal>else</literal>
|
||
deyimleri kullanılabilir.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$konum = 1;
|
||
$ilk = 3;
|
||
|
||
switch (true) {
|
||
case $ilk - $konum === 1:
|
||
print "A";
|
||
break;
|
||
case $ilk - $konum === 2:
|
||
print "B";
|
||
break;
|
||
case $ilk - $konum === 3:
|
||
print "C";
|
||
break;
|
||
case $ilk - $konum === 4:
|
||
print "D";
|
||
break;
|
||
}
|
||
|
||
// "B" basar.
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
İki noktalı sözdizimi <literal>switch</literal> deyimi için de
|
||
desteklenmektedir. Daha fazla bilgi için, <link
|
||
linkend="control-structures.alternative-syntax">Denetim yapıları için
|
||
diğer sözdizimi</link> bölümünü inceleyebilirsiniz.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
switch ($i):
|
||
case 0:
|
||
echo "i eşittir 0";
|
||
break;
|
||
case 1:
|
||
echo "i eşittir 1";
|
||
break;
|
||
case 2:
|
||
echo "i eşittir 2";
|
||
break;
|
||
default:
|
||
echo "i ne 0, ne 1 ne de 2'ye eşittir;
|
||
endswitch;
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
<para>
|
||
<literal>case</literal>’ten sonraki iki nokta yerine aşağıdaki gibi
|
||
deyim sonunda noktalı virgül kullanmak da mümkündür:
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
switch($içecek)
|
||
{
|
||
case 'su';
|
||
case 'süt';
|
||
case 'ayran';
|
||
echo 'İyi seçim';
|
||
break;
|
||
default;
|
||
echo 'Lütfen yeniden seçiniz...';
|
||
break;
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
|
||
<sect2 role="seealso">
|
||
&reftitle.seealso;
|
||
<simplelist>
|
||
<member>&match;</member>
|
||
</simplelist>
|
||
</sect2>
|
||
</sect1>
|
||
|
||
<!-- 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
|
||
-->
|