svn: /phpdoc/tr/trunk/language/ operators.xml
[email protected] (Nilgün Belma Bugüner)
| Newsgroups | php.doc.tr |
|---|---|
| Message-ID | <[email protected]> |
nilgun Fri, 12 Oct 2018 13:44:47 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=345806
Log:
update for sync with English doc.
Changed paths:
U phpdoc/tr/trunk/language/operators.xml
svn-diffs-345806.txt
(text/x-diff, 39 KB)
Modified: phpdoc/tr/trunk/language/operators.xml
===================================================================
--- phpdoc/tr/trunk/language/operators.xml 2018-10-12 07:59:17 UTC (rev 345805)
+++ phpdoc/tr/trunk/language/operators.xml 2018-10-12 13:44:47 UTC (rev 345806)
@@ -1,28 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 297272 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 345447 Maintainer: nilgun Status: ready -->
<chapter xml:id="language.operators" xmlns="http://docbook.org/ns/docbook">
<title>İşleçler</title>
<simpara>
- Bir işleç, başka bir değer üretmek üzere bir veya daha fazla değerle
- (programcı dilinde ifadeyle) beslenen bir şeydir (yani, değerler işleçle
- birlikte bir ifade haline gelir). Bu bakımdan, bir değer döndüren
- işlevler ve benzeri oluşumlar (print gibi) ya da belirtilenden başka bir
- şey döndürmeyen (echo gibi) oluşumlar birer işleç olarak düşünülebilir.
+ Bir işleç, başka bir değer üretmek üzere bir veya daha fazla değer
+ (programcı dilinde ifade) alan bir şeydir (yani, bu yapı bir ifade haline
+ gelir).
</simpara>
<para>
- Üç tür işleç vardır. İlki tek bir değerle çalışan tek terimli işleç olup
- ! (olumsuzlama işleci) veya ++ (arttırım işleci) buna birer örnektir.
- İkinci işleç grubu iki terimlilerdir; PHP'nin desteklediği işleçlerin
- çoğunluğu bu grupta olup aşağıda <link
- linkend="language.operators.precedence">İşleç Önceliği</link> bölümünde
- liste halinde verilmişlerdir.
+ İşleçler aldıkları değer sayısına göre gruplanabilir. Tek terimli işleçler
+ yalnızca bir değer alır, örneğin, <literal>!</literal> (<link
+ linkend="language.operators.logical">mantıksal değil işleci</link>) veya
+ <literal>++</literal> (<link linkend="language.operators.increment">arttırım
+ işleci</link>). İki terimli işleçler iki değer alır, PHP'nin desteklediği
+ işleçlerin çoğunluğu bu grupta olup <link
+ linkend="language.operators.arithmetic">aritmetik işleçler</link>
+ <literal>+</literal> (artı) ve <literal>-</literal> (eksi) örnek olarak
+ verilebilir. Son olarak tek bir <link
+ linkend="language.operators.comparison.ternary">üç terimli işleci</link>,
+ <literal>? :</literal> vardır ve üç terim alır. Koşul işleci olarak da bilinir.
</para>
<para>
- Üçüncü grupta üç terimli işleç yer alır: ?:. Bir ifadeye bağlı olarak
- iki deyim veya çalıştırma yolunu seçmekten ziyade diğer iki ifadeden
- birini seçmek için kullanılır. İşlecin üç ifadesini parantez içinde
- belirtmek iyi bir uygulamadır.
+ PHP işleçleri tam liste halinde, aşağıda <link
+ linkend="language.operators.precedence">İşleç Önceliği</link> bölümünde
+ bulunabilir. Bölüm ayrıca, çeşitli farklı işleçleri içeren ifadelerin
+ değerlendirilişini yöneten işleç önceliğini ve ilişkilendirmeyi de
+ açıklamaktadır.
</para>
<sect1 xml:id="language.operators.precedence">
@@ -33,13 +37,33 @@
16'dır. Çünkü, çarpma ("*") işlecinin önceliği toplama ("+") işlecinden
yüksektir. Önceliği arttırmak için gerekirse parantezler kullanılabilir.
Örneğin, <literal>(1 + 5) * 3</literal> ifadesinin sonucu 18 olacaktır.
- Eğer işleç önceliklerinde eşitlik sözkonusu olursa soldaki işleç
- sağdakinden öncelikli olur.
</para>
<para>
+ İşleçler eşit önceliğe sahip olduklarında aralarındaki ilişkiye işleçlerin
+ gruplanışına göre karar verilir. Örneğin "-" isoldan ilişkilendirmelidir,
+ dolayısıyla, <literal>1 - 2 - 3</literal> ifadesi
+ <literal>(1 - 2) - 3</literal> olarak gruplanır ve <literal>-4</literal>
+ olarak değerlendirlir. "=" ise sağdan ilişkilendirmelidir, dolayısıyla,
+ <literal>$a = $b = $c</literal> ifadesi <literal>$a = ($b = $c)</literal>
+ olarak gruplanır. Özetle, soldan ilişkilendirme, ifadenin soldan sağa, sağdan
+ ilişkilendirme ise sağdan sola değerlendirileceği anlamına gelir.
+ </para>
+ <para>
+ İlişkisel olmayan eş öncelikli işleçler birbirlerinin ardından
+ kullanılamazlar, örneğin <literal>1 < 2 > 1</literal> ifadesi PHP için
+ uygun değilken <literal>1 <= 1 == 1</literal> ifadesi uygundur. Sebebi
+ <literal>==</literal> işlecinin <literal><=</literal> işlecinden daha az
+ öncelikli olmasıdır.
+ </para>
+ <para>
+ Parantez kullanımı gerekli olmasa bile çoğunlukla kodun okunabilirliğini
+ arttırır. Örtük işleç önceliğine ve ilişkiselliğine güvenmektense kodu
+ açıkça gruplamak daha iyidir.
+ </para>
+ <para>
Aşağıdaki listede işleçler en yüksek öncelikliden başlayıp en düşük
öncelikliye doğru sıralanmışlardır. Aynı satırda yer alan işleçler
- eşöncelikli olup hangi sırada ele alınacaklarına değerlendirme sırasında
+ eş öncelikli olup hangi sırada ele alınacaklarına değerlendirme sırasında
karar verilir.
<table>
<title>İşleç Öncelikleri</title>
@@ -54,34 +78,47 @@
<tbody>
<row>
<entry>yönsüz</entry>
- <entry><userinput>clone new</userinput></entry>
+ <entry>
+ <literal>clone</literal>
+ <literal>new</literal>
+ </entry>
<entry><link linkend="language.oop5.cloning">clone</link> ve <link
linkend="language.oop5.basic.new">new</link></entry>
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>[</userinput></entry>
+ <entry><literal>[</literal></entry>
<entry><function>array</function></entry>
</row>
<row>
- <entry>yönsüz</entry>
- <entry><userinput>++ --</userinput></entry>
+ <entry>right</entry>
+ <entry><literal>**</literal></entry>
<entry>
- <link
- linkend="language.operators.increment">arttırım/eksiltim</link>
+ <link linkend="language.operators.arithmetic">aritmetik</link>
</entry>
</row>
<row>
<entry>sağdan</entry>
- <entry><userinput>~ - (int) (float) (string) (array) (object)
- (bool)</userinput> @</entry>
<entry>
- <link linkend="language.types">Türler</link>
+ <literal>++</literal>
+ <literal>--</literal>
+ <literal>~</literal>
+ <literal>(int)</literal>
+ <literal>(float)</literal>
+ <literal>(string)</literal>
+ <literal>(array)</literal>
+ <literal>(object)</literal>
+ <literal>(bool)</literal>
+ <literal>@</literal>
</entry>
+ <entry>
+ <link linkend="language.types">türler</link> ve
+ <link linkend="language.operators.increment">arttırım/eksiltim</link>
+ </entry>
</row>
<row>
<entry>yönsüz</entry>
- <entry><userinput>instanceof</userinput></entry>
+ <entry><literal>instanceof</literal></entry>
<entry>
<link linkend="language.types">Türler</link>
</entry>
@@ -88,7 +125,7 @@
</row>
<row>
<entry>sağdan</entry>
- <entry><userinput>!</userinput></entry>
+ <entry><literal>!</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
@@ -95,43 +132,66 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>* / %</userinput></entry>
<entry>
+ <literal>*</literal>
+ <literal>/</literal>
+ <literal>%</literal>
+ </entry>
+ <entry>
<link linkend="language.operators.arithmetic">aritmetik</link>
</entry>
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>+ - .</userinput></entry>
<entry>
+ <literal>+</literal>
+ <literal>-</literal>
+ <literal>.</literal>
+ </entry>
+ <entry>
<link linkend="language.operators.arithmetic">aritmetik</link>
- &listendand; <link linkend="language.operators.string"
- >dizge</link></entry>
+ ve <link linkend="language.operators.string">dize</link>
+ </entry>
</row>
<row>
<entry>soldan</entry>
- <entry><userinput><< >></userinput></entry>
<entry>
+ <literal><<</literal>
+ <literal>>></literal>
+ </entry>
+ <entry>
<link linkend="language.operators.bitwise">bitsel</link>
</entry>
</row>
<row>
<entry>yönsüz</entry>
- <entry><userinput>< <= > >= <></userinput></entry>
<entry>
+ <literal><</literal>
+ <literal><=</literal>
+ <literal>></literal>
+ <literal>>=</literal>
+ </entry>
+ <entry>
<link linkend="language.operators.comparison">karşılaştırma</link>
</entry>
</row>
<row>
<entry>yönsüz</entry>
- <entry><userinput>== != === !==</userinput></entry>
<entry>
+ <literal>==</literal>
+ <literal>!=</literal>
+ <literal>===</literal>
+ <literal>!==</literal>
+ <literal><></literal>
+ <literal><=></literal>
+ </entry>
+ <entry>
<link linkend="language.operators.comparison">karşılaştırma</link>
</entry>
</row>
<row>
<entry>left</entry>
- <entry><userinput>&</userinput></entry>
+ <entry><literal>&</literal></entry>
<entry>
<link linkend="language.operators.bitwise">bitsel</link>&listendand;
<link linkend="language.references">gönderimler</link></entry>
@@ -138,7 +198,7 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>^</userinput></entry>
+ <entry><literal>^</literal></entry>
<entry>
<link linkend="language.operators.bitwise">bitsel</link>
</entry>
@@ -145,7 +205,7 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>|</userinput></entry>
+ <entry><literal>|</literal></entry>
<entry>
<link linkend="language.operators.bitwise">bitsel</link>
</entry>
@@ -152,7 +212,7 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>&&</userinput></entry>
+ <entry><literal>&&</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
@@ -159,14 +219,21 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>||</userinput></entry>
+ <entry><literal>||</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
</row>
<row>
+ <entry>right</entry>
+ <entry><literal>??</literal></entry>
+ <entry>
+ <link linkend="language.operators.comparison">karşılaştırma</link>
+ </entry>
+ </row>
+ <row>
<entry>soldan</entry>
- <entry><userinput>? :</userinput></entry>
+ <entry><literal>? :</literal></entry>
<entry>
<link linkend="language.operators.comparison.ternary">üç terimli
</link>
@@ -175,8 +242,19 @@
<row>
<entry>sağdan</entry>
<entry>
- <userinput>= += -= *= /= .= %= &= |= ^= <<= >>= =>
- </userinput>
+ <literal>=</literal>
+ <literal>+=</literal>
+ <literal>-=</literal>
+ <literal>*=</literal>
+ <literal>**=</literal>
+ <literal>/=</literal>
+ <literal>.=</literal>
+ <literal>%=</literal>
+ <literal>&=</literal>
+ <literal>|=</literal>
+ <literal>^=</literal>
+ <literal><<=</literal>
+ <literal>>>=</literal>
</entry>
<entry>
<link linkend="language.operators.assignment">atama</link>
@@ -184,7 +262,7 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>and</userinput></entry>
+ <entry><literal>and</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
@@ -191,7 +269,7 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>xor</userinput></entry>
+ <entry><literal>xor</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
@@ -198,23 +276,16 @@
</row>
<row>
<entry>soldan</entry>
- <entry><userinput>or</userinput></entry>
+ <entry><literal>or</literal></entry>
<entry>
<link linkend="language.operators.logical">mantıksal</link>
</entry>
</row>
- <row>
- <entry>soldan</entry>
- <entry><userinput>,</userinput></entry>
- <entry>birçok kullanım</entry>
- </row>
</tbody>
</tgroup>
</table>
</para>
<para>
- Soldan ilişkilendirme, ifadenin soldan sağa, sağdan ilişkilendirme ise
- sağdan sola değerlendirileceği anlamına gelir.
<example>
<title>- Öncelik yönü</title>
<programlisting role="php">
@@ -221,6 +292,7 @@
<![CDATA[
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
+// üç terimli işlecin değerlendirilmesi C/C++ dillerinden farklıdır
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
@@ -230,8 +302,55 @@
]]>
</programlisting>
</example>
- Parantezleri kodun okunabilirliğini arttırmak için kullanın.
</para>
+ <para>
+ İşleç önceliklerini ve işlem yönünü ifadeni gruplanışı belirler. PHP
+ (genelde) ifadenin hangi sırayla değerlendirileceğini belirmez ve
+ kodlamada özel bir değerlendirme sırası kabulünden kaçınılmalıdır.
+ Çünkü davranış PHP'nin sürümleri arasında farklı olabildiği gibi
+ sarmalayan koda bağlı olarak da değişebilir.
+ <example>
+ <title>- Tanımsız değerlendirme sırası</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$a = 1;
+echo $a + $a++; // 2 veya 3 basabilir
+
+$i = 1;
+$array[$i] = $i++; // indis 1 veya 2 olabilir
+?>
+]]>
+ </programlisting>
+ </example>
+ <example>
+ <title><literal>+</literal>, <literal>-</literal> ve <literal>.</literal>
+ aynı önceliğe sahiptir</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$x = 4;
+// bu satır beklenmedik bir çıktı ile sonuçlanabilir:
+echo "x eksi bir eşittir " . $x-1 . ", ya da ben öyle umdum\n";
+
+// çünkü aşağıdaki satır gibi değerlendirilir:
+echo (("x eksi bir eşittir " . $x) - 1) . ", ya da ben öyle umdum\n";
+
+// istenen öncelik parantez kullanarak elde edilebilir:
+echo "x eksi bir eşittir " . ($x-1) . ", ya da ben öyle umdum\n";
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+-1, ya da ben öyle umdum
+-1, ya da ben öyle umdum
+x eksi bir eşittir 3, ya da ben öyle umdum
+]]>
+ </screen>
+ </example>
+ </para>
<note>
<para>
Eşitlik (<literal>=</literal>) işleci çoğu işleçten daha düşük önceliğe
@@ -260,6 +379,14 @@
</thead>
<tbody>
<row>
+ <entry>+$a</entry>
+ <entry>Özdeşlik</entry>
+ <entry>
+ <varname>$a</varname>'nın <type>int</type> veya
+ <type>float</type>'a dönüşümü.
+ </entry>
+ </row>
+ <row>
<entry><userinput>-$a</userinput></entry>
<entry>Olumsuzlama</entry>
<entry><varname>$a</varname>'nın eksi işaretlisi.</entry>
@@ -289,6 +416,11 @@
<entry>Kalan</entry>
<entry><varname>$a</varname>'nın <varname>$b</varname>'ye bölümünden kalan.</entry>
</row>
+ <row>
+ <entry>$a ** $b</entry>
+ <entry>Üs</entry>
+ <entry><varname>$a</varname> üssü <varname>$b</varname>. PHP 5.6 ile eklendi.</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -296,17 +428,31 @@
Bölme işlecinin tamsayı bölüm vermesi için iki teriminin de tamsayı
(veya dönüşüm sonucu tamsayı olan dizge) olması ve birbirlerine tam
olarak bölünmesi gerekir, aksi takdirde bölüm gerçek sayı olacaktır.
+ Tamsayı bölme için <function>intdiv</function> işlevine bakınız.
</simpara>
<simpara>
Kalan işlecinin (<literal>%</literal>) terimleri gerçek sayılarsa
- ondalık kısımları atılarak tamsayıya dönüştürülürler.
+ ondalık kısımları atılarak tamsayıya dönüştürülürler. Gerçek sayı bölmeden
+ kalan için <function>fmod</function> işlevine bakınız.
</simpara>
- <note>
- <simpara>
- <literal>$a % $b</literal> işleminin sonucu, <varname>$a</varname>
- negatifse negatif olacaktır.
- </simpara>
- </note>
+ <para>
+ <literal>%</literal> kalan işlecinin sonucu bölünenin işaretini alır. Yani
+ <literal>$a % $b</literal> işlemini sonucu <varname>$a</varname> ile aynı işaretli olacaktır. Örnek:
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+echo (5 % 3)."\n"; // 2 basar
+echo (5 % -3)."\n"; // 2 basar
+echo (-5 % 3)."\n"; // -2 basar
+echo (-5 % -3)."\n"; // -2 basar
+
+?>
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
<simpara>
<link linkend="ref.math">Matematik işlevleri</link> bölümüne de bakınız.
</simpara>
@@ -339,12 +485,6 @@
</informalexample>
</para>
<para>
- Diziler içi bir değerin bir isimli anahtara atanması "=>" işleci
- kullanılarak gerçekleştirilir. Bu işlecin
- <link linkend="language.operators.precedence">önceliği</link> diğer atama
- işleçlerinin önceliğiyle aynıdır.
- </para>
- <para>
Temel atama işlecinden başka atama işlemini temel aritmetik, <link
linkend="language.operators">ikil aritmetik</link> işlemleriyle veya
dizi ya da dizge birleştirme işlemleriyle birleştiren, "birleşik atama
@@ -370,15 +510,75 @@
atadığına) dikkat ediniz. Dolayısıyla birinde yapılan değişiklik
diğerini etkilemeyecektir. Kapalı bir döngü içinde büyükçe bir diziye
atama işlemleri yapma ihtiyacı duyarsanız bu ayrı bir anlam kazanır.
- Gönderimli atama <literal>$değişken = &$diğerdeğişken;</literal>
- sözdizimi ile desteklenmektedir. 'Gönderimli atama' denince, iki
- değişkenin aynı veriyi gösterdiğini ve birbirlerinden birşeyler
- kopyalamadıklarını anlıyoruz. Gönderimler hakkında daha ayrıntılı bilgi
- edinmek için <link linkend="language.references">Gönderimlerle ilgili
- herşey</link> bölümüne bakınız. PHP 5'ten itibaren, <link
- linkend="language.oop5.cloning">clone</link> anahtar sözcüğü ile yeni
- bir nesneye atama yapılmadıkça, nesneler gönderimli olarak atanırlar.
+ </para>
+ <para>
+ PHP içindeki değere göre olağan atama davranışının bir istisnası,
+ gönderimle atanan nesnelerle gerçekleşir. Nesneler
+ <link linkend="language.oop5.cloning">clone</link> anahtar sözcüğü ile
+ doğrudan kopyalanabilir.
</para>
+
+ <sect2 xml:id="language.operators.assignment.reference">
+ <title>Gönderimli atama</title>
+ <para>
+ Gönderimli atama <literal>$değişken = &$diğerdeğişken;</literal>
+ sözdizimi ile desteklenmektedir. 'Gönderimli atama' denince, iki
+ değişkenin aynı veriyi gösterdiğini ve birbirlerinden birşeyler
+ kopyalamadıklarını anlıyoruz.
+ </para>
+ <para>
+ <example>
+ <title>- Gönderimli atama</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$a = 3;
+$b = &$a; // $b, $a'ya bir gönderimdir
+
+print "$a\n"; // 3 basar
+print "$b\n"; // 3 basar
+
+$a = 4; // $a değişir
+
+print "$a\n"; // 4 basar
+print "$b\n"; // bu da 4 basar, $b, $a'ya bir gönderimdi ve $a değişti
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ <para>
+ <link linkend="language.oop5.basic.new">new</link> işleci özdevinimli
+ olarak bir gönderim döndürür. Dolayısıyla,
+ <link linkend="language.oop5.basic.new">new</link> sonucunu gönderimli
+ atamak PHP 5.3 ve sonrasında bir <constant>E_DEPRECATED</constant>
+ iletisiyle, önceki sürümlerde ise bir <constant>E_STRICT</constant>
+ iletisiyle sonuçlanır.
+ </para>
+ <para>
+ Örneğin bu kod bir uyarı ile somuçlanır:
+ <informalexample>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class C {}
+
+/* Aşağıdaki satırın ürettiği hata iletisi:
+ * Deprecated: Assigning the return value of new by reference is deprecated in...
+ */
+$o = &new C;
+?>
+]]>
+ </programlisting>
+ </informalexample>
+ </para>
+ <para>
+ Gönderimler hakkında daha ayrıntılı bilgi
+ edinmek için <link linkend="language.references">Gönderimlerle ilgili
+ herşey</link> bölümüne bakınız.
+ </para>
+ </sect2>
</sect1>
<sect1 xml:id="language.operators.bitwise">
@@ -460,11 +660,23 @@
önce bitsel VE sonra eşitlik uygulanır.
</para>
<para>
- Veri türü dönüşümlerinde dikkatli olun. Eğer sol ve sağ taraf
- değiştirgelerinin ikisi de dizge ise bitsel işleçler terimlerdeki
- karakterlerin ASCII değerleri üzerinde işlem yapacaktır.
+ Eğer <literal>&</literal>, <literal>|</literal> ve
+ <literal>^</literal> için her iki terim de dize ise terimlerdeki
+ karakterlerin ASCII değerleri üzerinde işlem yapılır ve sonuç bir dize
+ olur. Tüm diğer durumlarda, her iki terim <link
+ linkend="language.types.integer.casting">tamsayıya dönüştürülür</link>
+ ve sonuç tamsayı olur.
</para>
<para>
+ <literal>~</literal> işleci için terim bir dize ise, terimdeki
+ karakterlerin ASCII değerleri üzerinde işlem yapılır ve sonuç bir dize
+ olur. Aksi takdirde, terim ve sonuç tamsayı olarak ele alınır.
+ </para>
+ <para>
+ <literal><<</literal> ve <literal>>></literal> işleçleri için
+ her iki terim ve sonuç daima tamsayı olarak ele alınır.
+ </para>
+ <para>
<informalexample>
<para>
<literallayout>
@@ -1011,11 +1223,18 @@
</para>
<warning>
<para>
- 32 bitlik sistemlerde 32 bitten fazla sağa kaydırma yapmayın. 32 bitten
- daha geniş bir sayıyla sonuçlanacak şekilde sola kaydırma yapmayın.
- PHP_INT_MAX'tan büyük sayılar üzerinde bitsel işlemler yapacaksanız gmp
- eklentisindeki işlevleri kullanın.
+ PHP 7.0 öncesinde, tamsayıları, sistem uzun tamsayı genişliğinden büyük
+ veya ona eşit olan değerlere göre veya negatif sayılara göre kaydırmak,
+ tanımlanmamış davranışlarla sonuçlanır. Başka bir deyişle, PHP 5.x
+ kullanıyorsanız, 32 bitlik sistemlerde 31 bitten, 64 bitlik sistemlerde
+ 63 bitten fazla kaydırma yapmayın.
</para>
+ <para>
+ Use functions from the <link linkend="book.gmp">gmp</link> extension for
+ bitwise manipulation on numbers beyond <literal>PHP_INT_MAX</literal>'ın
+ ötesindeki sayılar üzerinde bitsel işlemler için
+ <link linkend="book.gmp">gmp</link> eklentisindeki işlevleri kullanın.
+ </para>
</warning>
<para>
Ayrıca bakınız:
@@ -1051,8 +1270,8 @@
<row>
<entry><userinput>$a == $b</userinput></entry>
<entry>Eşittir</entry>
- <entry><varname>$a</varname> ve <varname>$b</varname> aynı değere
- sahipse sonuç &true; olur.</entry>
+ <entry>Tür dönüşümünden sonra, <varname>$a</varname> ve
+ <varname>$b</varname> aynı değere sahipse sonuç &true; olur.</entry>
</row>
<row>
<entry><userinput>$a === $b</userinput></entry>
@@ -1059,20 +1278,22 @@
<entry>Aynıdır</entry>
<entry>
<varname>$a</varname> ve <varname>$b</varname> aynı değere sahipse ve
- türleri de aynıysa sonuç &true; olur. (PHP 4'ten beri vardır.)
+ türleri de aynıysa sonuç &true; olur.
</entry>
</row>
<row>
<entry><userinput>$a != $b</userinput></entry>
<entry>Eşit değildir</entry>
- <entry><varname>$a</varname> ve <varname>$b</varname> aynı değere sahip
- değilse sonuç &true; olur.</entry>
+ <entry>Tür dönüşümünden sonra, <varname>$a</varname> ve
+ <varname>$b</varname> aynı değere sahip değilse sonuç &true; olur.
+ </entry>
</row>
<row>
<entry><userinput>$a <> $b</userinput></entry>
<entry>Eşit değildir</entry>
- <entry><varname>$a</varname> ve <varname>$b</varname> aynı değere sahip
- değilse sonuç &true; olur.</entry>
+ <entry>Tür dönüşümünden sonra, <varname>$a</varname> ve
+ <varname>$b</varname> aynı değere sahip değilse sonuç &true; olur.
+ </entry>
</row>
<row>
<entry><userinput>$a !== $b</userinput></entry>
@@ -1079,8 +1300,7 @@
<entry>Farklıdır</entry>
<entry>
<varname>$a</varname> ve <varname>$b</varname> aynı değere sahip
- değilse veya türleri aynı değilse sonuç &true; olur. (PHP 4'ten beri
- vardır.)
+ değilse veya türleri aynı değilse sonuç &true; olur.
</entry>
</row>
<row>
@@ -1107,12 +1327,22 @@
<entry><varname>$a</varname>, <varname>$b</varname>'den büyük veya ona
eşitse sonuç &true; olur.</entry>
</row>
+ <row>
+ <entry>$a <=> $b</entry>
+ <entry>Mekik</entry>
+ <entry>
+ An <type>integer</type> less than, equal to, or greater than zero when
+ <varname>$a</varname> küçük, eşit ve büyük <varname>$b</varname>
+ olduğunda, bir tamsayı da sırasıyla küçük, eşit ve büyük sıfırdır.
+ PHP 7 ve sonrasında kullanılabilir.
+ </entry>
+ </row>
</tbody>
</tgroup>
</table>
<para>
- Bir sayıyı bir dizge ile veya iki sayısal dizgeyi karşılaştırmak
- isterseniz dizge önce <link linkend="language.types.string.conversion">bir
+ Bir sayıyı bir dize ile veya iki sayısal dizgeyi karşılaştırmak
+ isterseniz dize önce <link linkend="language.types.string.conversion">bir
sayıya dönüştürülür</link> ve karşılaştırma sayısal olarak yapılır. Bu
kurallar ayrıca <link linkend="control-structures.switch">switch</link>
deyimine de uygulanır. === veya !== ile tür ve dolayısıyla değer
@@ -1137,6 +1367,56 @@
?>
]]>
</programlisting>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// Tamsayılar
+echo 1 <=> 1; // 0
+echo 1 <=> 2; // -1
+echo 2 <=> 1; // 1
+
+// Gerçeller
+echo 1.5 <=> 1.5; // 0
+echo 1.5 <=> 2.5; // -1
+echo 2.5 <=> 1.5; // 1
+
+// Dizeler
+echo "a" <=> "a"; // 0
+echo "a" <=> "b"; // -1
+echo "b" <=> "a"; // 1
+
+echo "a" <=> "aa"; // -1
+echo "zz" <=> "aa"; // 1
+
+// Diziler
+echo [] <=> []; // 0
+echo [1, 2, 3] <=> [1, 2, 3]; // 0
+echo [1, 2, 3] <=> []; // 1
+echo [1, 2, 3] <=> [1, 2, 1]; // 1
+echo [1, 2, 3] <=> [1, 2, 4]; // -1
+
+// Nesneler
+$a = (object) ["a" => "b"];
+$b = (object) ["a" => "b"];
+echo $a <=> $b; // 0
+
+$a = (object) ["a" => "b"];
+$b = (object) ["a" => "c"];
+echo $a <=> $b; // -1
+
+$a = (object) ["a" => "c"];
+$b = (object) ["a" => "b"];
+echo $a <=> $b; // 1
+
+// sadece değerler karşılaştırılmaz, anahtarlar da eşleşmeli
+$a = (object) ["a" => "b"];
+$b = (object) ["b" => "b"];
+echo $a <=> $b; // 1
+
+?>
+]]>
+
+ </programlisting>
</informalexample>
</para>
@@ -1164,16 +1444,15 @@
<row>
<entry><type>bool</type> veya <type>null</type></entry>
<entry>herhangi bir tür</entry>
- <entry><type>bool</type> türüne dönüşümden sonra &false; < &true;
- karşılaştırması yapılır</entry>
+ <entry>Her iki tarafta <type>bool</type> türüne dönüşümden sonra
+ &false; < &true; karşılaştırması yapılır</entry>
</row>
<row>
<entry><type>object</type></entry>
<entry><type>object</type></entry>
<entry>Yerleşik sınıflar kendi karşılaştırmalarını tanımlayabilir.
- Farklı sınıflar karşılaştırılamazlar. Aynı sınıfın özellikleri
- dizilerdeki gibi (PHP 4) karşılaştırırılır. PHP 5'in <link
- linkend="language.oop5.object-comparison">uygulaması</link> farklıdır.
+ Farklı sınıflar karşılaştırılamazlar. Aynı sınıflar için bkz: <link
+ linkend="language.oop5.object-comparison">Nesne karşılaştırması</link>
</entry>
</row>
<row>
@@ -1193,14 +1472,14 @@
bakınız).</entry>
</row>
<row>
- <entry><type>array</type></entry>
+ <entry><type>object</type></entry>
<entry>herhangi bir tür</entry>
- <entry><type>array</type> daima büyüktür.</entry>
+ <entry><type>object</type> daima büyüktür.</entry>
</row>
<row>
- <entry><type>object</type></entry>
+ <entry><type>array</type></entry>
<entry>herhangi bir tür</entry>
- <entry><type>object</type> daima büyüktür</entry>
+ <entry><type>array</type> daima büyüktür</entry>
</row>
</tbody>
</tgroup>
@@ -1207,6 +1486,25 @@
</table>
<para>
<example>
+ <title>Boolean/null comparison</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// Bool ve null daima bool gibi karşılaştırılır.
+var_dump(1 == TRUE); // TRUE - (bool)1 == TRUE ile aynı
+var_dump(0 == FALSE); // TRUE - (bool)0 == FALSE ile aynı
+var_dump(100 < TRUE); // FALSE - (bool)100 < TRUE ile aynı
+var_dump(-10 < FALSE);// FALSE - (bool)-10 < FALSE ile aynı
+var_dump(min(-100, -10, NULL, 10, 100)); // NULL - (bool)NULL < (bool)-100 is FALSE < TRUE
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+
+
+ <para>
+ <example>
<title>- Özetle Standard Dizi Karşılaştırması</title>
<programlisting role="php">
<![CDATA[
@@ -1294,11 +1592,12 @@
</para>
<note>
<simpara>
- Üç terimli işleç aslında bir deyimdir, dolayısıyla sonucu bir
- değişkene atanamaz. Bir değişkeni gönderimli döndürmek istediğiniz
+ Üç terimli işleç aslında bir ifadedir, dolayısıyla sonucu bir
+ değişkene atanamaz, fakat bir deyimin sonucuna atanabilir.
+ Bir değişkeni gönderimli döndürmek istediğiniz
takdirde bu önem kazanır. Gönderimli olarak değer döndüren bir işlevde
<literal>return $var == 42 ? $a : $b;</literal> deyimi bu bakımdan
- çalışmaz ve güncel PHP sürümlerinde bir uyarı gösterilir.
+ çalışmaz ve bir uyarı gösterilir.
</simpara>
</note>
<note>
@@ -1330,7 +1629,72 @@
</para>
</note>
</sect2>
+
+ <sect2 xml:id="language.operators.comparison.coalesce">
+ <title>Null kaynaşma işleci</title>
+ <para>
+ "??" (veya null kaynaşma) işleci, PHP 7 ve sonrasında kullanılabilir.
+ <example>
+ <title>- Öntanımlı değer atama</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// Null kaynaşma işleci için kullanım örneği
+$action = $_POST['action'] ?? 'default';
+// Yukarıdaki satır, bu if/else deyimine esdeğerdir.
+if (isset($_POST['action'])) {
+ $action = $_POST['action'];
+} else {
+ $action = 'default';
+}
+
+?>
+]]>
+ </programlisting>
+ </example>
+ <literal>(ifade1) ?? (ifade2)</literal> ifadesinin sonucu,
+ <replaceable>ifade1</replaceable> &null;
+ ise <replaceable>ifade2</replaceable>
+ değilse <replaceable>ifade1</replaceable>'dir.
+ </para>
+ <para>
+ Aslında, bu işleç sol taraf değeri mevcut değilse <function>isset</function>
+ gibi bir uyarı çıktılamaz. Bu, özellikle dizi anahtarlarında kullanışlıdır.
+ </para>
+ <note>
+ <simpara>
+ Null kaynaşma işleci bir ifade olup bir değişkene atanmaz ama bir deyimin
+ sonucuna atanabilir. Bir değişkeni gönderimli döndürmek istiyorsanız bunu
+ bilmek önemlidir. Gönderimli döndüren bir işlevde
+ <literal>return $foo ?? $bar;</literal> deyimi bu nedenle çalışmaz ve bir
+ uyarı çıktılanır.
+ </simpara>
+ </note>
+ <note>
+ <para>
+ Null kaynaşma işleci basit iç içeliğe izi verir:
+ <example>
+ <title>- İçiçe null kaynaşma işleci</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+$foo = null;
+$bar = null;
+$baz = 1;
+$qux = 2;
+
+echo $foo ?? $bar ?? $baz ?? $qux; // 1 basar
+
+?>
+]]>
+ </programlisting>
+ </example>
+ </para>
+ </note>
+ </sect2>
+
</sect1>
<sect1 xml:id="language.operators.errorcontrol">
@@ -1340,6 +1704,12 @@
(<literal>@</literal>). PHP'de bir deyimin başına getirildiğinde,
bu deyimin üreteceği olası hata iletileri yok sayılır.
</simpara>
+ <simpara>
+ <function>set_error_handler</function> ile özel bir hata işleyici işlev
+ tanımlarsanız, hala çağrılmasına rağmen bu özel hata işleyicinin
+ <function>error_reporting</function> işlevini (hatayı tetikleyen çağrı @ ile
+ öncelenmişse 0 döndürür) çağırması gerekir.
+ </simpara>
<simpara>
Eğer <link linkend="ini.track-errors"><literal>track_errors</literal></link>
özelliği etkinse bu deyimin ürettiği hata iletileri
@@ -1420,6 +1790,12 @@
değilse, çalıştırma işleci etkin değildir.
</para>
</note>
+ <note>
+ <para>
+ Bazı başka dillerin aksine, tek tırnak imlerinin çift tırnaklı dizeler içinde
+ özel bir anlamı yoktur.
+ </para>
+ </note>
<para>
Ayrıca, <link linkend="ref.exec">Program Çalıştırma İşlevleri</link>,
<function>popen</function>, <function>proc_open</function> işlevleri ve
@@ -1436,7 +1812,8 @@
</para>
<note>
<simpara>
- Arttırım ve eksiltim işleçleri mantıksal değerler üzerinde etkisizdir.
+ Arttırım ve eksiltim işleçleri sadece sayıları ve dizeleri etkiler.
+ Diziler, nesneler ve özkaynaklar etkilenmez.
&null; değerini eksiltmenin bir etkisi yoktur fakat arttırmanın sonucu
<literal>1</literal>'dir.
</simpara>
@@ -1511,19 +1888,35 @@
</para>
<para>
PHP, karakter değişkenleri üzerinde çalışırken C'nin değil Perl'in
- yöntemlerini izler. Örneğin, Perl'de 'Z'+1 ifadesi 'AA' değerini
- döndürürken, C'de '[' döner ( ord('Z') == 90, ord('[') == 91 ).
+ yöntemlerini izler. Örneğin, PHP ve Perl'de
+ <literal>$a = 'Z'; $a++;</literal> ifadesi <literal>$a</literal>
+ içinde 'AA' değerini döndürürken, C'de <literal>a = 'Z'; a++;</literal>
+ ifadesi <literal>a</literal> içinde'[' döndürür. <literal>'Z'</literal>
+ için ASCII değer 90, <literal>'['</literal> için 91'dir.
Karakterlerin arttırılabileceğini fakat azaltılamayacağını ve sadece
- ASCII harflerin (a-z ve A-Z) desteklendiğine dikkat ediniz.
+ ASCII harflerin ve rakamların (a-z ve A-Z, 0-9) desteklendiğine dikkat
+ ediniz. Diğer karakterler üzerinde arttırım ve eksiltim etkisiz olup
+ özgün değer değişmeden döndürürlür.
<example>
<title>- Karakter değişkenleri üzerinde aritmetik işlemler</title>
<programlisting role="php">
<![CDATA[
<?php
+echo '== Harfler ==' . PHP_EOL;
$i = 'W';
for ($n=0; $n<6; $n++) {
- echo ++$i . "\n";
+ echo ++$s . PHP_EOL;
}
+// Rakam karakterleri farklı davranır
+echo '== Rakamlar ==' . PHP_EOL;
+$d = 'A8';
+for ($n=0; $n<6; $n++) {
+ echo ++$d . PHP_EOL;
+}
+$d = 'A08';
+for ($n=0; $n<6; $n++) {
+ echo ++$d . PHP_EOL;
+}
?>
]]>
</programlisting>
@@ -1530,6 +1923,7 @@
&example.outputs;
<screen>
<![CDATA[
+== Harfler ==
X
Y
Z
@@ -1536,6 +1930,19 @@
AA
AB
AC
+== Rakamlar ==
+A9
+B0
+B1
+B2
+B3
+B4
+A09
+A10
+A11
+A12
+A13
+A14
]]>
</screen>
</example>
@@ -1621,8 +2028,8 @@
// Tıpkı şöyle: ($e = (false || true))
$e = false || true;
-// false sabiti $f'ye atanır ve true yoksayılır
-// Tıpkı böyle: (($e = false) or true)
+// "or" işleminden önce false sabiti $f'ye atanır ve true yoksayılır
+// Tıpkı böyle: (($f = false) or true)
$f = false or true;
var_dump($e, $f);
@@ -1633,7 +2040,7 @@
// Tıpkı böyle: ($g = (true && false))
$g = true && false;
-// true sabiti $h'ya atanır ve false yoksayılır
+// "and" işleminden önce true sabiti $h'ya atanır ve false yoksayılır
// Tıpkı böyle: (($h = true) and false)
$h = true and false;
@@ -1732,9 +2139,10 @@
</tgroup>
</table>
<para>
- <literal>+</literal> işleci sağ taraftaki dizinin elemanlarını sol
- taraftaki dizinin elemanlarının arasına ekler. Bunu yaparken anahtarları
- aynı olan elemanların üzerine yazılmaz.
+ <literal>+</literal> işleci sol taraf dizisini sağ taraf dizisine ekleyip sağ
+ taraf dizisini döndürür. Her iki dizinin anahtarları alınır, sol taraf
+ dizisinin elemenları alınır ve sağ taraf dizisindeki eşleşen elemanlar yok
+ sayılır.
</para>
<para>
<informalexample>
@@ -1751,6 +2159,10 @@
$c = $b + $a;
echo "\$b ve \$a'nın birleşimi: \n";
var_dump($c);
+
+$a += $b; // $a += $b'nin birleşimi $a ve $b'dir
+echo "\$a += \$b'nin birleşimi: \n";
+var_dump($a);
?>
]]>
</programlisting>
@@ -1776,6 +2188,15 @@
["c"]=>
string(6) "çilek"
}
+$a += $b'nin birleşimi:
+array(3) {
+ 'a' =>
+ string(5) "elma"
+ 'b' =>
+ string(6) "muz"
+ 'c' =>
+ string(6) "çilek"
+}
]]>
</screen>
</para>
@@ -1970,9 +2391,38 @@
</example>
</para>
<para>
+ Sınanan değişken bir nesne değilse instanceof hata çıktılamaz, basitçe
+ &false; döndürür. Sabitlere izin verilmez.
+ <example>
+ <title>- Değişkenleri sınamak için <literal>instanceof</literal> kullanımı</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$a = 1;
+$b = NULL;
+$c = imagecreate(5, 5);
+var_dump($a instanceof stdClass); // $a bir tamsayıdır
+var_dump($b instanceof stdClass); // $b NULL'dur
+var_dump($c instanceof stdClass); // $c bir özkaynaktır
+var_dump(FALSE instanceof stdClass);
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+bool(false)
+bool(false)
+bool(false)
+PHP Fatal error: instanceof expects an object instance, constant given
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
Burada bilmeniz gereken bir kaç zorluk vardır. PHP 5.1.0 öncesinde,
- <literal>instanceof</literal> işleci, sınıf mevcut değilse <link
- linkend="language.oop5.autoload">__autoload()</link> çağrısı yapardı.
+ <literal>instanceof</literal> işleci, sınıf mevcut değilse
+ <function>__autoload</function> çağrısı yapardı.
Buna ek olarak, sınıf yüklenmemişse bir ölümcül hata oluşurdu. Bunun
olmaması için bir <literal>devingen sınıf gönderimi</literal> veya sınıf
ismini içeren bir dizge değişkeni kullanılabilir:
@@ -1985,7 +2435,7 @@
$d = 'BaşkaSınıf';
var_dump($a instanceof $d); // burada ölümcül hata oluşmaz
?>
- ]]>
+]]>
</programlisting>
&example.outputs;
<screen>