com doc/tr: update for sync with English docs.: language/attributes.xml language/oop5/decon.xml language/types/declarations.xml

[email protected] (Nilgün Belma Bugüner) Wed, 06 Jan 2021 00:38:20 +0000
Newsgroups php.doc.tr
Message-ID <[email protected]>
Commit:    5d04e430acb3190345499179b5ed57c449847b19
Author:    Nilgün Belma Bugüner <[email protected]>         Wed, 6 Jan 2021 03:38:20 +0300
Parents:   4841b61534898f9591ebc61dacd1d88ce3f33d05
Branches:  master

Link:       http://git.php.net/?p=doc/tr.git;a=commitdiff;h=5d04e430acb3190345499179b5ed57c449847b19

Log:
update for sync with English docs.

Changed paths:
  A  language/attributes.xml
  M  language/oop5/decon.xml
  A  language/types/declarations.xml
diff_5d04e430acb3190345499179b5ed57c449847b19.txt (text/plain, 33.2 KB)
diff --git a/language/attributes.xml b/language/attributes.xml
new file mode 100644
index 00000000..db0f59c1
--- /dev/null
+++ b/language/attributes.xml
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: e132ef28fdcd0a05280a15df68c2fda3c690ba1c Maintainer: nilgun Status: ready -->
+ <chapter xml:id="language.attributes" xmlns="http://docbook.org/ns/docbook">
+  <title>Öznitelikler</title>
+  <sect1 xml:id="language.attributes.overview">
+   <title>Özniteliklere giriş</title>
+   <?phpdoc print-version-for="attributes"?>
+
+   <para>
+    Öznitelikler, koddaki bildirimlerin üzerine yapılandırılmış, makine
+    tarafından okunabilir meta veri bilgilerinin eklenmesine izin verir:
+    Sınıflar, yöntemler, işlevler, değiştirgeler, özellikler ve sınıf
+    sabitleri bir özniteliğin hedefi olabilir. Özniteliklerle tanımlanan
+    meta veriler daha sonra <link linkend="book.reflection">Yansıtma 
+    Arayüzleri</link> kullanılarak çalışma anında incelenebilir. 
+    Bu nedenle öznitelikler, doğrudan koda gömülmüş bir yapılandırma dili 
+    olarak düşünülebilir.
+   </para>
+
+   <para>
+    Özniteliklerle, bir özelliğin kapsamlı gerçeklenimi ile bir 
+    uygulamadaki somut kullanımı ayrıştırılabilir. Bir bakıma arayüzler, 
+    gerçeklenimleri ile karşılaştırılabilir. Ancak arayüzlerin ve 
+    gerçeklenimlerin kodla ilgili olduğu yerlerde öznitelikler, ek bilgi
+    ve yapılandırmaya küçük açıklamalar eklemekle ilgilidir. Arayüzler 
+    sınıflarla gerçeklenebilir, ancak öznitelikler ek olarak yöntemler, 
+    işlevler, değiştirgeler, özellikler ve sınıf sabitleri üzerinde de 
+    bildirilebilir. Bu nedenle arayüzlerden daha esnektir.
+   </para>
+
+   <para>
+    Öznitelik kullanımına basit bir örnek, öznitelikleri kullanmak için isteğe 
+    bağlı yöntemlere sahip bir arayüzü dönüştürmektir. 
+    <literal>ActionHandler</literal> arayüzünün bir uygulamadaki bir işlemi
+    yerine getirdiğini ve bu arayüzün bazı gerçeklenimlerinin ilklendirilmesi 
+    gerekirken diğerlerine bunun gerekmediğini varsayalım.     
+    <literal>ActionHandler</literal> arayüzünü gerçekleyen tüm sınıfların
+    <literal>setUp()</literal> yöntemini gerçeklemesi gerekirken, bunu
+    yapmak yerine, onun yerini alabilecek bir öznitelik kullanırız. 
+    Bu yaklaşımın tek yararı, öznitelliğin birkaç kez kullanabilmesidir.
+   </para>
+
+   <example>
+    <title>- Bir arayüzün isteğe bağlı yöntemlerini özniteliklerle gerçeklemek
+    </title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+interface ActionHandler
+{
+    public function execute();
+}
+
+#[Attribute]
+class SetUp {}
+
+class CopyFile implements ActionHandler
+{
+    public string $fileName;
+    public string $targetDirectory;
+
+    #[SetUp]
+    public function fileExists()
+    {
+        if (!file_exists($this->fileName)) {
+            throw new RuntimeException("Dosya yok");
+        }
+    }
+
+    #[SetUp]
+    public function targetDirectoryExists()
+    {
+        mkdir($this->targetDirectory);
+    }
+
+    public function execute()
+    {
+        copy($this->fileName, $this->targetDirectory . '/' . basename($this->fileName));
+    }
+}
+
+function executeAction(ActionHandler $actionHandler)
+{
+    $reflection = new ReflectionObject($actionHandler);
+
+    foreach ($reflection->getMethods() as $method) {
+        $attributes = $method->getAttributes(SetUp::class);
+
+        if (count($attributes) > 0) {
+            $methodName = $method->getName();
+
+            $actionHandler->$methodName();
+        }
+    }
+
+    $actionHandler->execute();
+}
+
+$copyAction = new CopyFile();
+$copyAction->fileName = "/tmp/foo.jpg";
+$copyAction->targetDirectory = "/home/user";
+
+executeAction($copyAction);
+]]>
+     </programlisting>
+    </example>
+  </sect1>
+
+  <sect1 xml:id="language.attributes.syntax">
+   <title>Öznitelik Sözdizimi</title>
+
+   <para>
+    Öznitelik sözdizimi çeşitli parçalardan oluşur. İlk olarak, öznitelik
+    bildirimi her zaman bir #[ ile başlar ve bir ] biter. İçeride, virgüllerle
+    ayrılmış bir veya daha fazla öznitelik bulunur. Öznitelik adı, 
+    <link linkend="language.namespaces.basics">İsim alanlarının kullanımı:
+    Temeller</link> bölümünde açıklandığı gibi nitelenmemiş, nitelenmiş 
+    veya tam nitelenmiş olabilir. Özniteliğin değiştirgeleri isteğe bağlıdır, 
+    ancak normalde parantez () içine alınır. Özniteliklerin değiştirgeleri 
+    yalnızca değişmez değerler veya sabit ifadeleri olabilir. Hem konumsal
+    hem de isimli değiştirge sözdizimi kullanılabilir.
+   </para>
+
+   <para>
+    Öznitelik adları ve değiştirgeleri bir sınıfa çözümlenir, eğer 
+    özniteliğin bir örneği yansıtma arayüzü aracılığıyla istenirse 
+    değiştirgeler kurucuya iletilir. Her öznitelik için böyle bir 
+    sınıf kullanılmalıdır.
+   </para>
+
+   <example>
+    <title>- Öznitelik Sözdizimi</title>
+
+    <programlisting role="php">
+<![CDATA[
+<?php
+// a.php
+namespace MyExample;
+
+use Attribute;
+
+#[Attribute]
+class MyAttribute
+{
+    const VALUE = 'value';
+
+    private $value;
+
+    public function __construct($value = null)
+    {
+        $this->value = $value;
+    }
+}
+
+// b.php
+
+namespace Another;
+
+use MyExample\MyAttribute;
+
+#[MyAttribute]
+#[\MyExample\MyAttribute]
+#[MyAttribute(1234)]
+#[MyAttribute(value: 1234)]
+#[MyAttribute(MyAttribute::VALUE)]
+#[MyAttribute(array("key" => "value"))]
+#[MyAttribute(100 + 200)]
+class Thing
+{
+}
+
+#[MyAttribute(1234), MyAttribute(5678)]
+class AnotherThing
+{
+}
+]]>
+    </programlisting>
+   </example>
+  </sect1>
+
+
+  <sect1 xml:id="language.attributes.reflection">
+   <title>Özniteliklerin Yansıtma Arayüzü ile Okunması</title>
+
+   <para>
+    Sınıflar, yöntemler, işlevler, değiştirgeler, özellikler ve sınıf
+    sabitlerinden özniteliklere erişmek için kullanılan yansıtma arayüzü, ilgili 
+    Reflection nesnelerinin her birine <function>getAttributes</function>
+    yöntemini sağlar. Bu yöntem, öznitelik adı, değiştirgeler ve temsil 
+    edilen özniteliğin bir örneğini örneklendirmek için sorgulanabilen    
+    <classname>ReflectionAttribute</classname> örneklerini içeren bir 
+    dizi döndürür.    
+   </para>
+
+   <para>
+    Yansıtılan öznitelik temsilinin gerçek örnekten bu şekilde ayrılması, 
+    programcının eksik öznitelik sınıfları, yanlış yazılmış veya eksik 
+    değiştirgelerle ilgili hataları elde etme konusundaki denetimini artırır.
+    Öznitelik sınıfının nesneleri, yalnızca <function>newInstance</function> 
+    çağrıldıktan sonra başlatılırsa değiştirgelerin doğru eşleşmesi sağlanır, 
+    daha önce değil.
+   </para>
+
+   <example>
+    <title>- Özniteliklerin Yansıtma Arayüzü kullanılarak Okunması</title>
+
+    <programlisting role="php">
+<![CDATA[
+<?php
+
+#[Attribute]
+class MyAttribute
+{
+    public $value;
+
+    public function __construct($value)
+    {
+        $this->value = $value;
+    }
+}
+
+#[MyAttribute(value: 1234)]
+class Thing
+{
+}
+
+function dumpAttributeData($reflection) {
+    $attributes = $reflection->getAttributes();
+
+    foreach ($attributes as $attribute) {
+       var_dump($attribute->getName());
+       var_dump($attribute->getArguments());
+       var_dump($attribute->newInstance());
+    }
+}
+
+dumpAttributeData(new ReflectionClass(Thing::class));
+/*
+string(11) "MyAttribute"
+array(1) {
+  ["value"]=>
+  int(1234)
+}
+object(MyAttribute)#3 (1) {
+  ["value"]=>
+  int(1234)
+}
+*/
+
+]]>
+    </programlisting>
+   </example>
+
+   <para>
+    Yansıtma örneğindeki tüm öznitelikleri yinelemek yerine, yalnızca belirli
+    bir öznitelik sınıfı, sınıfın ismi değiştirge olarak aktarılarak okunabilir.
+   </para>
+
+   <example>
+    <title>- Yansıtma Arayüzünü kullanarak istenen özniteliklerin okunması</title>
+
+    <programlisting role="php">
+<![CDATA[
+<?php
+
+function dumpMyAttributeData($reflection) {
+    $attributes = $reflection->getAttributes(MyAttribute::class);
+
+    foreach ($attributes as $attribute) {
+       var_dump($attribute->getName());
+       var_dump($attribute->getArguments());
+       var_dump($attribute->newInstance());
+    }
+}
+
+dumpAttributeData(new ReflectionClass(Thing::class));
+]]>
+     </programlisting>
+    </example>
+  </sect1>
+
+  <sect1 xml:id="language.attributes.classes">
+   <title>Öznitelik Sınıflarının Bildirimi</title>
+
+   <para>
+    Zorunlu olmamakla birlikte, her öznitelik için gerçek bir sınıfın 
+    oluşturulması önerilir. En basit durumda, bir use ifadesiyle küresel isim 
+    alanından içe aktarılabilen #[Attribute] özniteliğinin bildirimi için
+    yalnızca boş bir sınıfa ihtiyaç vardır.
+   </para>
+
+  <example>
+   <title>- Özniteliklerin kullanılabileceği yerleri kısıtlamak için hedef 
+    belirtiminin kullanımı</title>
+
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+namespace Example;
+
+use Attribute;
+
+#[Attribute]
+class MyAttribute
+{
+}
+]]>
+   </programlisting>
+  </example>
+
+  <para>
+   Bir özniteliğin atanabileceği bildirim türünü kısıtlamak için, #[Attribute] 
+   bildirimine ilk değiştirge olarak bir bit maskesi aktarılabilir.
+  </para>
+
+  <example>
+   <title>- Basit Öznitelik sınıfı</title>
+
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+namespace Example;
+
+use Attribute;
+
+#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION)]
+class MyAttribute
+{
+}
+]]>
+    </programlisting>
+
+    <para>
+     <classname>MyAttribute</classname> sınıfını başka bir türde bildirilmesi,
+     <function>ReflectionAttribute::newInstance</function> çağrısı sırasında bir 
+     istisna oluşmasına sebep olur.
+    </para>
+   </example>
+
+   <para>
+    Öntanımlı olarak, bir öznitelik her bildirimde yalnızca bir kere 
+    kullanılabilir. Özniteliğin bildirimlerde yinelenebilir olması isteniyorsa,
+    <literal>#[Attribute]</literal> bildiriminde bit maskesinin bir parçası 
+    olarak belirtilmelidir.
+   </para>
+
+   <example>
+    <title>- Özniteliğin bir bildirimle defalarca kullanılabilmesi için
+    IS_REPEATABLE kullanımı</title>
+
+    <programlisting role="php">
+<![CDATA[
+<?php
+
+namespace Example;
+
+use Attribute;
+
+#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_FUNCTION | Attribute::IS_REPEATABLE)]
+class MyAttribute
+{
+}
+]]>
+    </programlisting>
+
+   </example>
+  </sect1>
+ </chapter>
+
+<!-- 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
+-->
diff --git a/language/oop5/decon.xml b/language/oop5/decon.xml
index 1f7d2772..2a0edf8e 100644
--- a/language/oop5/decon.xml
+++ b/language/oop5/decon.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: a6338d747762e36e01061eae19aadca4167375b6 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: e4963bb8a4ac3a7af25c0ed2baf74a17d010e2f1 Maintainer: nilgun Status: ready -->
 <!-- CREDITS: tpug, sezer -->
  <sect1 xml:id="language.oop5.decon" xmlns="http://docbook.org/ns/docbook">
   <title>Kurucular ve Yıkıcılar</title>
diff --git a/language/types/declarations.xml b/language/types/declarations.xml
new file mode 100644
index 00000000..fb20a384
--- /dev/null
+++ b/language/types/declarations.xml
@@ -0,0 +1,820 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 1ffbadf2906a5c85d2f9437b87da3e204ea41b7a Maintainer: nilgun Status: ready -->
+<sect1 xml:id="language.types.declarations">
+ <title>Tür Bildirimleri</title>
+
+ <para>
+  Tür bildirimleri işlev değiştirgelerine, dönüş değerlerine ve PHP 7.4.0'dan 
+  itibaren sınıf özelliklerine eklenebilir. Değerin çağrı sırasında belirtilen 
+  türde olmasını sağlarlar, aksi takdirde bir <classname>TypeError</classname> 
+  oluşur.
+ </para>
+
+ <!-- Find better place where to put this note -->
+ <note>
+  <!-- TODO Link to covariance section -->
+  <para>
+   Bir ebeveyn yöntemi geçersiz kılarken, çocuğun yöntemi ebeveynin 
+   herhangi bir dönüş türü bildirimiyle eşleşmelidir. Ebeveyn bir dönüş türü 
+   tanımlamıyorsa, çocuk yöntem bunu yapabilir.   
+  </para>
+ </note>
+
+ <sect2 xml:id="language.types.declarations.base">
+  <title>Tekil türler</title>
+  <informaltable>
+   <tgroup cols="3">
+    <thead>
+     <row>
+      <entry>&Type;</entry>
+      <entry>&Description;</entry>
+      <entry>&Version;</entry>
+     </row>
+    </thead>
+    <tbody>
+     <row>
+      <entry>Sınıf/Arayüz Adı</entry>
+      <entry>
+       Değer, verilen sınıfın veya arabirimin bir örneği (&instanceof;) 
+       olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>self</type></entry>
+      <entry>
+       Değer, yöntemin tanımlandığı sınıftan örneklenmiş (&instanceof;) 
+       olmalıdır. Sadece sınıflarda kullanılabilir.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>array</type></entry>
+      <entry>
+       Değer <type>array</type> türünde olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>callable</type></entry>
+      <entry>
+       Değer <type>callable</type> türünde ve geçerli olmalıdır.
+       Bir sınıf özelliğinin tür bildirimi kullanılamaz.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>bool</type></entry>
+      <entry>
+       Değer mantıksal bir değer olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>float</type></entry>
+      <entry>
+       Değer kayan noktalı bir sayı olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>int</type></entry>
+      <entry>
+       Değer bir tamsayı olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>string</type></entry>
+      <entry>
+       Değer <type>string</type> türünde olmalıdır.
+      </entry>
+      <entry></entry>
+     </row>
+     <row>
+      <entry><type>iterable</type></entry>
+      <entry>
+       Değer <classname>Traversable</classname> sınıfının bir örneğı veya 
+       dizisi olmalıdır.
+      </entry>
+      <entry>PHP 7.1.0</entry>
+     </row>
+     <row>
+      <entry><type>object</type></entry>
+      <entry>
+       Değer <type>object</type> türünde olmalıdır.
+      </entry>
+      <entry>PHP 7.2.0</entry>
+     </row>
+     <row>
+      <entry><type>mixed</type></entry>
+      <entry>
+       Değer, herhangi bir değer olabilir.
+      </entry>
+      <entry>PHP 8.0.0</entry>
+     </row>
+    </tbody>
+   </tgroup>
+  </informaltable>
+
+  <warning>
+   <para>
+    Yukarıdaki, sayılarla ifade edilebilen türler için takma adlar 
+    desteklenmez. Yapıldığı takdirde bunlar sınıf veya arayüz isimleri 
+    olarak değerlendirilir. Örneğin, tür bildirimi olarak 
+    <literal>boolean</literal> kullanmak, <type>bool</type> türünde bir 
+    değer yerine, <literal>boolean</literal> sınıfının veya arayüzünün 
+    örneği olan bir değer gerektirir:
+   </para>
+   <para>
+    <example>
+     <programlisting role="php">
+<![CDATA[
+<?php
+    function test(boolean $param) {}
+    test(true);
+?>
+]]>
+     </programlisting>
+     &example.outputs.8;
+     <screen>
+<![CDATA[
+Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in /in/9YrUX on line 2
+
+Fatal error: Uncaught TypeError: test(): Argument #1 ($param) must be of type boolean, bool given, called in - on line 3 and defined in -:2
+Stack trace:
+#0 -(3): test(true)
+#1 {main}
+  thrown in - on line 2
+]]>
+     </screen>
+    </example>
+   </para>
+  </warning>
+
+ <sect3 xml:id="language.types.declarations.mixed">
+  <title>mixed</title>
+
+  <para>
+   <type>mixed</type> türü
+   <type class="union">
+    <type>array</type><type>bool</type><type>callable</type>
+    <type>int</type><type>float</type><type>object</type>
+    <type>resource</type><type>string</type><type>null</type>
+   </type> 
+   <link linkend="language.types.declarations.union">birlik türüne</link>
+   eşdeğerdir. PHP 8.0.0 ve sonrasında kullanılabilir.
+  </para>
+ </sect3>
+
+  <sect3 xml:id="language.types.declarations.examples">
+   &reftitle.examples;
+   <example>
+    <title>- Temel sınıf türü bildirimi</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+class C {}
+class D extends C {}
+
+// Bu C ile genişletilmiyor.
+class E {}
+
+function f(C $c) {
+    echo get_class($c)."\n";
+}
+
+f(new C);
+f(new D);
+f(new E);
+?>
+]]>
+    </programlisting>
+    &example.outputs.8;
+    <screen>
+<![CDATA[
+C
+D
+
+Fatal error: Uncaught TypeError: f(): Argument #1 ($c) must be of type C, E given, called in /in/gLonb on line 14 and defined in /in/gLonb:8
+Stack trace:
+#0 -(14): f(Object(E))
+#1 {main}
+  thrown in - on line 8
+]]>
+    </screen>
+   </example>
+
+   <example>
+    <title>- Temel arayüz türü bildirimi</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+interface I { public function f(); }
+class C implements I { public function f() {} }
+
+// Bu I'yi gerçeklemiyor.
+class E {}
+
+function f(I $i) {
+    echo get_class($i)."\n";
+}
+
+f(new C);
+f(new E);
+?>
+]]>
+    </programlisting>
+    &example.outputs.8;
+    <screen>
+<![CDATA[
+C
+
+Fatal error: Uncaught TypeError: f(): Argument #1 ($i) must be of type I, E given, called in - on line 13 and defined in -:8
+Stack trace:
+#0 -(13): f(Object(E))
+#1 {main}
+  thrown in - on line 8
+]]>
+    </screen>
+   </example>
+
+   <example>
+    <title>- Temel dönüş türü bildirimi</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+function sum($a, $b): float {
+    return $a + $b;
+}
+
+// Dikkat bu bir float döndürmeyecek.
+var_dump(sum(1, 2));
+?>
+]]>
+    </programlisting>
+    &example.outputs;
+    <screen>
+<![CDATA[
+float(3)
+]]>
+    </screen>
+   </example>
+
+   <example>
+    <title>- Bir nesne döndürmek</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+class C {}
+
+function getC(): C {
+    return new C;
+}
+
+var_dump(getC());
+?>
+]]>
+    </programlisting>
+    &example.outputs;
+    <screen>
+<![CDATA[
+object(C)#1 (0) {
+}
+]]>
+    </screen>
+   </example>
+  </sect3>
+ </sect2>
+
+ <sect2 xml:id="language.types.declarations.nullable">
+  <title>Boş olabilen türler</title>
+
+  <para>
+   PHP 7.1.0 ve sonrasında, tür isminin önüne bir soru imi 
+   (<literal>?</literal>) konarak, tür bildirimleri boş olabilir (nullable) 
+   olarak imlenebilmektedir. Bu sözdizimi, değerin belirtilen türde veya &null; 
+   olabileceğini belirtir.
+  </para>
+
+  <para>
+   <example>
+    <title>- Boş olabilen değiştirge türü bildirimi</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+class C {}
+
+function f(?C $c) {
+    var_dump($c);
+}
+
+f(new C);
+f(null);
+?>
+]]>
+    </programlisting>
+    &example.outputs;
+    <screen>
+<![CDATA[
+object(C)#1 (0) {
+}
+NULL
+]]>
+    </screen>
+   </example>
+
+   <example>
+    <title>- Boş olabilen dönüş türü bildirimi</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+function get_item(): ?string {
+    if (isset($_GET['item'])) {
+        return $_GET['item'];
+    } else {
+        return null;
+    }
+}
+?>
+]]>
+    </programlisting>
+   </example>
+  </para>
+
+  <note>
+   <para>
+    PHP 7.1.0 öncesinde, <literal>null</literal>'u öntanımlı değer yaparak 
+    boş olabilen değiştirgeler elde etmek mümkündü. Kalıtım sırasında
+    kesildiği için bu önerilmez.
+   </para>
+   <example>
+    <title>- Boş olabilen değiştirge yapmanın eski yolu</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+class C {}
+
+function f(C $c = null) {
+    var_dump($c);
+}
+
+f(new C);
+f(null);
+?>
+]]>
+    </programlisting>
+    &example.outputs;
+    <screen>
+<![CDATA[
+object(C)#1 (0) {
+}
+NULL
+]]>
+    </screen>
+   </example>
+  </note>
+ </sect2>
+
+ <sect2 xml:id="language.types.declarations.union">
+  <title>Birleşim türleri</title>
+  <para>
+   Bir birleşim (union) türü bildirimi, tek bir tür yerine birden fazla türde 
+   değer kabul eder. Birleşim türleri <literal>T1|T2|...</literal> sözdizimi 
+   kullanılarak belirtilir. Birleşim türleri PHP 8.0.0 ve sonrasında 
+   kullanılabilir.
+  </para>
+
+  <sect3 xml:id="language.types.declarations.union.nullable">
+   <title>Boş olabilen birleşim türleri</title>
+   <para>
+    Boş (<literal>null</literal>) tür, birleşimlerin bir parçası olarak 
+    desteklenir, öyle ki <literal>T1|T2|null</literal> sözdizimi, boş
+    olabilen bir birleşim oluşturmak için kullanılabilir. Mevcut 
+    <literal>?T</literal> gösterimi, yaygın <literal>T|null</literal> 
+    durumu için bir kısaltma olarak kabul edilir.
+   </para>
+
+   <caution>
+    <simpara>
+     <literal>null</literal> tek başına bir tür olarak kullanılamaz.
+    </simpara>
+   </caution>
+  </sect3>
+
+  <sect3 xml:id="language.types.declarations.union.false">
+   <title>false sözde türü</title>
+   <para>
+    <literal>false</literal> değişmez türü, birleşimlerin bir parçası olarak
+    desteklenir ve tarihsel nedenlerden ötürü, birçok dahili işlev başarısızlık
+    durumunda <literal>null</literal> yerine <literal>false</literal> döndürür.
+    Böyle bir işleve klasik bir örnek <function>strpos</function>'dur.
+   </para>
+
+   <caution>
+    <simpara>
+     <literal>false</literal> tek başına bir tür olarak kullanılamaz (boş
+     olabilen tür dahil). Bu nedenle, <literal>false</literal>,
+     <literal>false|null</literal> ve <literal>?false</literal> ifadelerinin hiçbirine izin verilmez.
+    </simpara>
+   </caution>
+   <caution>
+    <simpara>
+     <literal>true</literal> tek başına türü mevcut <emphasis>değildir</emphasis>.
+    </simpara>
+   </caution>
+  </sect3>
+
+  <sect3 xml:id="language.types.declarations.union.redundant">
+   <title>Yinelenen ve artık türler</title>
+   <para>
+    Birleşim türü bildirimlerindeki basit hataları yakalamak için, sınıf
+    yüklemesi gerçekleştirilmeden algılanabilen artık türler bir derleme anı hatasıyla sonuçlanacaktır. Şunları içerir:
+
+    <itemizedlist>
+     <listitem>
+      <simpara>
+       Ad-çözümlemeli her tür yalnızca bir kere görünebilir. Örneğin,
+       <literal>int|string|INT</literal> birleşimi bir hatayla sonuçlanır.
+      </simpara>
+     </listitem>
+     <listitem>
+      <simpara>
+       Eğer <type>bool</type> kullanılmışsa, yanına <type>false</type> eklenemez.
+      </simpara>
+     </listitem>
+     <listitem>
+      <simpara>
+       Eğer <type>object</type> kullanılmışsa, yanına sınıf türleri eklenemez.
+      </simpara>
+     </listitem>
+     <listitem>
+      <simpara>
+       Eğer <type>iterable</type> kullanılmışsa, yanına <type>array</type>
+       ve <classname>Traversable</classname> eklenemez.
+      </simpara>
+     </listitem>
+    </itemizedlist>
+   </para>
+
+   <note>
+    <simpara>
+     Bu, türün "en düşükte" olduğunu garanti etmez, çünkü bunu yapmak tüm 
+     kullanılan sınıf türlerinin yüklenmesini gerektirecektir.
+    </simpara>
+   </note>
+
+   <para>
+    Örneğin, <literal>A</literal> ve <literal>B</literal> sınıfın diğer adları 
+    ise, <literal>A|B</literal> sonradan <literal>A</literal> veya 
+    <literal>B</literal>'ye indirgense bile meşru bir birleşim türü olarak kalır.
+    Benzer şekilde, <literal>B</literal> sınıfı <literal>A</literal>'yı
+    genişletirse, <literal>A|B</literal> de meşru bir birleşim türüdür,
+    ancak sadece <literal>A</literal>'ya indirgenebilir.
+
+    <informalexample>
+     <programlisting role="php">
+<![CDATA[
+<?php
+function foo(): int|INT {} // izin verilmez
+function foo(): bool|false {} // izin verilmez
+
+use A as B;
+function foo(): A|B {} // izin verilmez ("use" ad çözünürlüğünün bir parçasıdır)
+
+class_alias('X', 'Y');
+function foo(): X|Y {} // izin verilir (fazlalık sadece çalışma anında anlaşılır)
+?>
+]]>
+     </programlisting>
+    </informalexample>
+   </para>
+  </sect3>
+
+ </sect2>
+
+ <sect2 xml:id="language.types.declarations.return-only">
+  <title>Dönüşe özgü türler</title>
+
+  <sect3 xml:id="language.types.declarations.void">
+   <title>void</title>
+   <para>
+    <literal>void</literal> işlevin bir değer döndürmediğini belirten bir
+    dönüş türüdür. Bundan dolayı birleşim türündeki bildirimlerde yer alamaz. 
+    PHP 7.1.0 ve sonrasında geçerlidir.
+   </para>
+  </sect3>
+
+  <sect3 xml:id="language.types.declarations.static">
+   <title>static</title>
+   <para>
+    Değer, yöntemin çağrıldığı sınıf örneğinin örneklendiği sınıfın bir örneği
+    olmalıdır. PHP 8.0.0 ve sonrasında geçerlidir.
+   </para>
+  </sect3>
+ </sect2>
+
+ <sect2 xml:id="language.types.declarations.strict">
+  <title>Katı kodlama</title>
+
+  <para>
+   Öntanımlı olarak, PHP, eğer mümkünse, yanlış türdeki değerleri beklenen
+   sayıl tür bildirimine zorlar. Örneğin, <type>string</type> türünde bir 
+   değer alması beklenen bir değiştirge için <type>int</type> değer verilen
+   bir işlev için değer <type>string</type> türüne zorlanır.
+  </para>
+
+  <para>
+   Katı kipi dosya bazında etkinleştirmek mümkündür. Katı kipte, yalnızca tür
+   bildirimine tam olarak karşılık gelen bir değer kabul edilir, aksi takdirde
+   bir <classname>TypeError</classname> istisnası oluşur. Bu kuralın tek
+   istisnası, bir <type>int</type> değerinin bir <type>float</type> tür 
+   bildirimine aktarılmasıdır.
+  </para>
+
+  <warning>
+   <simpara>
+    Dahili işlevlerden gelen işlev çağrıları, <literal>strict_types</literal> 
+    bildiriminden etkilenmeyecektir.
+   </simpara>
+  </warning>
+
+  <para>
+   Katı modu etkinleştirmek için, &declare; deyimi
+   <literal>strict_types</literal> bildirimi ile birlikte kullanılır.
+  </para>
+
+  <note>
+   <para>
+    Katı kodlama, katı kodlama etkinleştirilmiş dosya içinden yapılan işlev
+    çağrıları için geçerlidir, o dosya içinde bildirilen işlevler için geçerli
+    değildir. Katı-kodlama-etkin bir dosyada tanımlanan bir işleve,
+    katı-kodlama-etkin-olmayan bir dosyadan çağrı yapılırsa, çağrıcının
+    tercihine (zorlayıcı kodlamaya) saygı gösterilecek ve değer zorlanacaktır.
+   </para>
+  </note>
+
+  <note>
+   <para>
+    Katı kodlama sadece sayıl tür bildirimleri için tanımlanır.
+   </para>
+  </note>
+
+  <example>
+   <title>- Değiştirge değerleri için katı kodlama</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+declare(strict_types=1);
+
+function sum(int $a, int $b) {
+    return $a + $b;
+}
+
+var_dump(sum(1, 2));
+var_dump(sum(1.5, 2.5));
+?>
+]]>
+   </programlisting>
+   &example.outputs.8;
+   <screen>
+<![CDATA[
+int(3)
+
+Fatal error: Uncaught TypeError: sum(): Argument #1 ($a) must be of type int, float given, called in - on line 9 and defined in -:4
+Stack trace:
+#0 -(9): sum(1.5, 2.5)
+#1 {main}
+  thrown in - on line 4
+]]>
+   </screen>
+  </example>
+
+  <example>
+   <title>- Değiştirge değerleri için zorlayıcı kodlama</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+function sum(int $a, int $b) {
+    return $a + $b;
+}
+
+var_dump(sum(1, 2));
+
+// Değerler tamsayılara zorlanacaktır, sonuç değil: çıktıya bakın!
+var_dump(sum(1.5, 2.5));
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+int(3)
+int(3)
+]]>
+   </screen>
+  </example>
+
+  <example>
+   <title>- Dönüş değerleri için katı kodlama</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+declare(strict_types=1);
+
+function sum($a, $b): int {
+    return $a + $b;
+}
+
+var_dump(sum(1, 2));
+var_dump(sum(1, 2.5));
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+int(3)
+
+Fatal error: Uncaught TypeError: sum(): Return value must be of type int, float returned in -:5
+Stack trace:
+#0 -(9): sum(1, 2.5)
+#1 {main}
+  thrown in - on line 5
+]]>
+   </screen>
+  </example>
+ </sect2>
+
+ <sect2 xml:id="language.types.declarations.union.coercive">
+  <title>Birleşim türleriyle zorlayıcı kodlama</title>
+  <para>
+   Katı kodlama etkinleştirilmediğinde, sayıl tür bildirimleri sınırlı örtük
+   tür zorlamalarına tabidir. Değerin tam türü birleşimin parçası değilse,
+   hedef tür aşağıdaki tercih sırasına göre seçilir:
+
+   <orderedlist>
+    <listitem>
+     <simpara>
+      <type>int</type>
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      <type>float</type>
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      <type>string</type>
+     </simpara>
+    </listitem>
+    <listitem>
+     <simpara>
+      <type>bool</type>
+     </simpara>
+    </listitem>
+   </orderedlist>
+
+   Tür birleşiminde her ikisi de mevcutsa ve değer PHP'nin mevcut tür denetleme 
+   yapısıyla bir türe zorlanabiliyorsa, o tür seçilir. Aksi takdirde bir sonraki 
+   tür denenir.
+  </para>
+
+  <caution>
+   <para>
+    Bir istisna olarak, değer bir dizeyse ve hem int hem de float birleşimin 
+    parçasıysa, tercih edilen tür, mevcut "sayısal dize" çözümlemesine göre 
+    belirlenir. Örneğin, <literal>"42"</literal> için <type>int</type>, 
+    <literal>"42.0"</literal> için <type>float</type> seçilir.
+   </para>
+  </caution>
+
+  <note>
+   <para>
+    Yukarıdaki tercih listesinin parçası olmayan türler, örtük zorlama için
+    uygun hedefler değildir. Özellikle, <literal>null</literal> ve
+    <literal>false</literal> türlere hiçbir örtük zorlama yapılmaz.
+   </para>
+  </note>
+
+  <example>
+   <title>- Birleşimin bir tür parçasına zorlanan türlere örnek</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+// int|string
+42    --> 42          // doğru tür
+"42"  --> "42"        // doğru tür
+new ObjectWithToString --> "Result of __toString()"
+                      // nesne int ile hiç uyumlu değil, dizeye dönülür
+42.0  --> 42          // float, int ile uyumlu
+42.1  --> 42          // float, int ile uyumlu
+1e100 --> "1.0E+100"  // float, int için çok büyük, dizeye dönülür
+INF   --> "INF"       // float, int için çok büyük, dizeye dönülür
+true  --> 1           // bool, int ile uyumlu
+[]    --> TypeError   // array, int veya string ile uyumlu değil
+
+// int|float|bool
+"45"    --> 45        // int sayısal dize
+"45.0"  --> 45.0      // float sayısal dize
+
+"45X"   --> true      // sayısal dize değil, bool'a dönülür
+""      --> false     // sayısal dize değil, bool'a dönülür
+"X"     --> true      // sayısal dize değil, bool'a dönülür
+[]      --> TypeError // array, int float veya bool ile uyumlu değil
+?>
+]]>
+   </programlisting>
+  </example>
+ </sect2>
+
+<!-- TODO figure out what do to with these things -->
+ <sect2 xml:id="language.types.declarations.misc">
+  <title>Çeşitli</title>
+   <example>
+    <title>Başvuruyla aktarılan değiştirgeler</title>
+    <simpara>
+     Bildirilen başvuru değiştirgelerinin türleri işlev girişinde denetlenir, ancak işlev döndüğünde denetlenmez, bu nedenle işlev döndükten sonra değiştirgenin türü değişmiş olabilir.
+    </simpara>
+    <programlisting role="php">
+<![CDATA[
+<?php
+function array_baz(array &$param)
+{
+    $param = 1;
+}
+$var = [];
+array_baz($var);
+var_dump($var);
+array_baz($var);
+?>
+]]>
+    </programlisting>
+    &example.outputs.8;
+    <screen>
+<![CDATA[
+int(1)
+
+Fatal error: Uncaught TypeError: array_baz(): Argument #1 ($param) must be of type array, int given, called in - on line 9 and defined in -:2
+Stack trace:
+#0 -(9): array_baz(1)
+#1 {main}
+  thrown in - on line 2
+]]>
+    </screen>
+   </example>
+
+   <example>
+    <title>- <classname>TypeError</classname> yakalama</title>
+    <programlisting role="php">
+<![CDATA[
+<?php
+declare(strict_types=1);
+
+function sum(int $a, int $b) {
+    return $a + $b;
+}
+
+try {
+    var_dump(sum(1, 2));
+    var_dump(sum(1.5, 2.5));
+} catch (TypeError $e) {
+    echo 'Error: ', $e->getMessage();
+}
+?>
+]]>
+    </programlisting>
+    &example.outputs.8;
+    <screen>
+<![CDATA[
+int(3)
+Error: sum(): Argument #1 ($a) must be of type int, float given, called in - on line 10
+]]>
+    </screen>
+   </example>
+ </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
+-->