com doc/tr: update for sync with English docs.: language/oop5/abstract.xml language/oop5/cloning.xml language/oop5/decon.xml language/oop5/final.xml language/oop5/magic.xml language/oop5/overloading.xml language/oop5/properties.xml language/oop5/traits.xml
[email protected] (Nilgün Belma Bugüner) Tue, 12 Jan 2021 04:20:05 +0000
| Newsgroups | php.doc.tr |
|---|---|
| Message-ID | <[email protected]> |
Commit: bbb4c0c9f20d020a26842991e1b9cabbe538d114 Author: Nilgün Belma Bugüner <[email protected]> Tue, 12 Jan 2021 07:20:05 +0300 Parents: f5a0ea7159ad3d4727d23090cc445ce55b5d2e62 Branches: master Link: http://git.php.net/?p=doc/tr.git;a=commitdiff;h=bbb4c0c9f20d020a26842991e1b9cabbe538d114 Log: update for sync with English docs. Changed paths: M language/oop5/abstract.xml M language/oop5/cloning.xml M language/oop5/decon.xml M language/oop5/final.xml M language/oop5/magic.xml M language/oop5/overloading.xml M language/oop5/properties.xml M language/oop5/traits.xml
diff_bbb4c0c9f20d020a26842991e1b9cabbe538d114.txt
(text/plain, 28.4 KB)
diff --git a/language/oop5/abstract.xml b/language/oop5/abstract.xml
index 74bdff36..0056a9d1 100644
--- a/language/oop5/abstract.xml
+++ b/language/oop5/abstract.xml
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: b7031192a2b7d97257d3e303b8eb0f4692819fee Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: d152dc10216193f0d98b3ead2cfcbaaa3b99c06d Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, sezer -->
<sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook">
<title>Sınıf Soyutlama</title>
<para>
PHP 5, soyut sınıf ve yöntemlerin kullanımını mümkün kılmıştır. Soyut
- olarak tanımlanmış bir sınıf örneklenemeyebilir ve en az bir soyut yöntem
- içeren bir sınıf da soyut olmalıdır. Soyut olarak tanımlanmış yöntemler o
+ olarak tanımlanmış bir sınıf örneklenemez ve en az bir soyut yöntem
+ içeren bir sınıf da soyut olmalıdır. Soyut olarak tanımlanmış yöntemler o
yöntemlerin imzasıdırlar, gerçeklemenin bütününü temsil edemezler.
</para>
@@ -20,11 +20,11 @@
>görünürlükle</link> tanımlanması gerekir. Örneğin, soyut yöntem
<code>protected</code> olarak tanımlanmışsa, işlev gerçeklenimi
<code>private</code> değil, <code>protected</code> ya da
- <code>public</code> olarak tanımlanmalıdır. Bundan başka, yöntemlerin
- imzaları da eşleşmelidir, örneğin gerekli değiştirgelerin tür ipuçları
- ve sayıları aynı olmalıdır. Örneğin bir çocuk sınıf seçimlik bir
- değiştirge tanımlarken soyut yöntem bunu yapmıyorsa bir imza uyumsuzluğu
- yoktur. PHP5.4'te bu kuruculara da uygulanır. PHP 5.4 öncesinde kurucu
+ <code>public</code> olarak tanımlanmalıdır. Bundan başka, yöntemlerin
+ imzaları da eşleşmelidir, örneğin gerekli değiştirgelerin tür ipuçları
+ ve sayıları aynı olmalıdır. Örneğin bir çocuk sınıf seçimlik bir
+ değiştirge tanımlarken soyut yöntem bunu yapmıyorsa bir imza uyumsuzluğu
+ yoktur. PHP5.4'te bu kuruculara da uygulanır. PHP 5.4 öncesinde kurucu
imzaları farklı olabilirdi.
</para>
@@ -88,7 +88,7 @@ FOO_SomutSınıf2
</screen>
</example>
<example>
- <title>Soyut sınıf örneği</title>
+ <title>-Soyut sınıf örneği</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -102,7 +102,7 @@ abstract class AbstractClass
class ConcreteClass extends AbstractClass
{
- // Çocuk sınıfımız seçimlik değiştirgeleri tanımlamalı
+ // Çocuk sınıfımız seçimlik değiştirgeleri tanımlamalı
// ebeveynin imzasındakileri değil
public function prefixName($name, $separator = ".") {
if ($name == "Pacman") {
diff --git a/language/oop5/cloning.xml b/language/oop5/cloning.xml
index ade469d0..ecaa5174 100644
--- a/language/oop5/cloning.xml
+++ b/language/oop5/cloning.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 2de9c1a37be1c0cba843cd4880ad1b27d25a8fcd Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 9093ce1bc60f23330e92e99784eec74d315f151c Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, sezer -->
<sect1 xml:id="language.oop5.cloning" xmlns="http://docbook.org/ns/docbook">
<title>Nesne Kopyalama</title>
@@ -22,8 +22,8 @@
<para>
Bir nesnenin kopyası (mümkünse nesnenin
<link linkend="object.clone">__clone()</link> yöntemini
- çağıran) <emphasis>clone</emphasis> anahtar sözcüğü kullanılarak
- oluşturulur. Bir nesnenin <link linkend="object.clone">__clone()</link>
+ çağıran) <emphasis>clone</emphasis> anahtar sözcüğü kullanılarak
+ oluşturulur. Bir nesnenin <link linkend="object.clone">__clone()</link>
yöntemi doğrudan doğruya çağrılamaz.
</para>
@@ -36,7 +36,7 @@ $nesnenin_kopyası = clone $object;
</informalexample>
<para>
- Bir nesne kopyalandığında, PHP 5 nesnenin tüm özelliklerinin yüzeysel bir
+ Bir nesne kopyalandığında, PHP nesnenin tüm özelliklerinin yüzeysel bir
kopyasını çıkartacaktır. Diğer değişkenlere birer gönderim olan tüm
özellikler gönderim olarak kalacaktır.
</para>
@@ -138,7 +138,7 @@ KopyalanabilirNesnem Object
</example>
<para>
- PHP 7.0.0 yeni kopyalanmış bir nesnenin üyesine tek bir ifadede erişme
+ PHP 7.0.0 yeni kopyalanmış bir nesnenin üyesine tek bir ifadede erişme
imkanını sağladı:
</para>
<example>
diff --git a/language/oop5/decon.xml b/language/oop5/decon.xml
index 7cd3f466..e447bf15 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: e4963bb8a4ac3a7af25c0ed2baf74a17d010e2f1 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 72880807af948704e2dd806ff38b08112d39469c 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>
@@ -10,7 +10,6 @@
<methodsynopsis xml:id="object.construct">
<type>void</type><methodname>__construct</methodname>
<methodparam rep="repeat"><type>mixed</type><parameter>değerler</parameter><initializer>""</initializer></methodparam>
-
</methodsynopsis>
<para>
PHP geliştiricilerin sınıflar için kurucu yöntemler bildirmesine
diff --git a/language/oop5/final.xml b/language/oop5/final.xml
index de6c2d51..caebb801 100644
--- a/language/oop5/final.xml
+++ b/language/oop5/final.xml
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 33040b3b1b95210112f7b3b71f57a1c005de1a3b Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 1ae887f71cee9a2b171e8344cef33af689cfcde0 Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, sezer -->
<sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook">
<title><code>final</code> Anahtar Sözcüğü</title>
<para>
PHP 5 ile birlikte gelen diğer bir yenilik <emphasis>final</emphasis> anahtar
sözcüğüdür. Bu anahtar sözcükle tanımlanmış bir yöntemi çocuk sınıflar
- geçersiz kılamazlar. Eğer bir sınıf kendini <emphasis>final</emphasis>
+ geçersiz kılamazlar. Eğer bir sınıf kendini <emphasis>final</emphasis>
sözcüğüyle tanımlamışsa o sınıf genişletilemez.
</para>
@@ -64,8 +64,8 @@ class ÇocukSınıf extends AnaSınıf {
</example>
<note>
<simpara>
- Özellikler <code>final</code> olarak bildirilemez, sadece sınıflar ve
- yöntemler <code>final</code> olarak bildirilebilir.
+ Özellikler ve sabitler <code>final</code> olarak bildirilemez,
+ sadece sınıflar ve yöntemler <code>final</code> olarak bildirilebilir.
</simpara>
</note>
</sect1>
diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml
index 35cc9554..88928220 100644
--- a/language/oop5/magic.xml
+++ b/language/oop5/magic.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: ec77057bf375ae4d50ffe24aa6f6a5dc629c10f3 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 9e0f03ac354d797d1d16c0fcc1663e5e170f2727 Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, sezer -->
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
<title>Sihirli Yöntemler</title>
@@ -15,6 +15,8 @@
<link linkend="object.unset">__unset()</link>,
<link linkend="object.sleep">__sleep()</link>,
<link linkend="object.wakeup">__wakeup()</link>,
+ <link linkend="object.serialize">__serialize()</link>,
+ <link linkend="object.unserialize">__unserialize()</link>,
<link linkend="object.tostring">__toString()</link>,
<link linkend="object.invoke">__invoke()</link>,
<link linkend="object.set-state">__set_state()</link>,
@@ -26,6 +28,13 @@
ismi olarak kullanamazsınız.
</para>
+ <note>
+ <simpara>
+ Tüm sihirli yöntemler <emphasis>KESİNLİKLE</emphasis>
+ <literal>public</literal> olarak bildirilmelidir.
+ </simpara>
+ </note>
+
<caution>
<simpara>
PHP, <literal>__</literal> ile baslayan tüm işlev isimlerini sihirli
@@ -41,23 +50,26 @@
</title>
<methodsynopsis xml:id="object.sleep">
- <modifier>public</modifier> <type>array</type><methodname>__sleep</methodname>
+ <modifier>public</modifier>
+ <type>array</type><methodname>__sleep</methodname>
<void/>
</methodsynopsis>
+
<methodsynopsis xml:id="object.wakeup">
+ <modifier>public</modifier>
<type>void</type><methodname>__wakeup</methodname>
<void/>
</methodsynopsis>
<para>
- <function>serialize</function> işlevi, sınıfınızın
+ <function>serialize</function> işlevi, sınıfın
<link linkend="object.sleep">__sleep()</link>
adında sihirli bir işleve sahip olup olmadığına bakar. Böyle bir işlev
- varsa herhangi bir serileştirme işleminden önce bu işlev çalıştırılır.
- Bu işlev ile nesne üzerinde temizlik yapabilir ve serileştirilmesi
+ varsa herhangi bir dizileştirme işleminden önce bu işlev çalıştırılır.
+ Bu işlev ile nesne üzerinde temizlik yapabilir ve dizileştirilmesi
gereken nesnenin tüm değişken isimlerinin bir dizi halinde döndürülmesini
sağlayabilirsiniz. Eğer işlev hiçbir şey döndürmemişse &null;
- serileştirilir ve bir <constant>E_NOTICE</constant> çıktılanır.
+ dizileştirilir ve bir <constant>E_NOTICE</constant> çıktılanır.
</para>
<note>
<para>
@@ -70,10 +82,9 @@
</note>
<para>
<link linkend="object.sleep">__sleep()</link> işlevinin asıl kullanım
- amacı askıdaki veriyi
- göndermek gibi temizliğe benzer işlemler yapmaktır. Ayrıca, tümüyle
- kaydedilmesi gerekmeyen büyük veri parçaları sözkonusu olduğunda da bu
- işlevden yararlanabilirsiniz.
+ amacı askıdaki veriyi göndermek gibi temizliğe benzer işlemler yapmaktır.
+ Ayrıca, tümüyle kaydedilmesi gerekmeyen büyük veri parçaları sözkonusu
+ olduğunda da bu işlevden yararlanabilirsiniz.
</para>
<para>
<function>unserialize</function> işlevi tersine bir işlem yaparak
@@ -84,9 +95,8 @@
</para>
<para>
<link linkend="object.wakeup">__wakeup()</link> işlevinin asıl kullanım
- amacı, serileştirme
- sırasında kaybedilebilen veritabanı bağlantılarını yeniden oluşturmak ve
- diğer ilklendirme işlemlerini yeniden yapmaktır.
+ amacı, dizileştirme sırasında kaybedilebilen veritabanı bağlantılarını
+ yeniden oluşturmak ve diğer ilklendirme işlemlerini yeniden yapmaktır.
</para>
<example>
<title>- Uyutma ve uyandırma</title>
@@ -127,12 +137,125 @@ class Bağlantı
</example>
</sect2>
+ <sect2 xml:id="language.oop5.magic.serialize">
+ <title>
+ <link linkend="object.serialize">__serialize()</link> ve
+ <link linkend="object.unserialize">__unserialize()</link>
+ </title>
+
+ <methodsynopsis xml:id="object.serialize">
+ <modifier>public</modifier> <type>array</type><methodname>__serialize</methodname>
+ <void/>
+ </methodsynopsis>
+ <methodsynopsis xml:id="object.unserialize">
+ <modifier>public</modifier> <type>void</type><methodname>__unserialize</methodname>
+ <methodparam><type>array</type><parameter>data</parameter></methodparam>
+ </methodsynopsis>
+
+ <para>
+ <function>serialize</function> işlevi, sınıfın
+ <link linkend="object.serialize">__serialize()</link> sihirli adına
+ sahip bir işlevinin olup olmadığına bakar. Varsa, bu işlev herhangi
+ bir dizileştirmeden önce çalıştırılır. Nesnenin dizileştirilmiş biçimini
+ temsil eden ilişkisel bir anahtar/değer çiftleri dizisi oluşturmalı ve
+ döndürmelidir. Hiçbir dizi döndürülmezse, bir
+ <classname>TypeError</classname> yavrulanır.
+ </para>
+ <note>
+ <para>
+ Aynı nesnede hem <link linkend="object.serialize">__serialize()</link>
+ hem de <link linkend="object.sleep">__sleep()</link> tanımlanmışsa,
+ sadece <link linkend="object.serialize">__serialize()</link>
+ çağrılır. <link linkend="object.sleep">__sleep()</link> ise yok
+ sayılır. Nesne <link linkend="class.serializable">Serializable</link>
+ arayüzünü gerçekliyorsa, arayüzün <literal>serialize()</literal> yöntemi
+ yok sayılır ve yerine <link linkend="object.serialize">__serialize()</link>
+ kullanılır.
+ </para>
+ </note>
+ <para>
+ <link linkend="object.serialize">__serialize()</link> yönteminin
+ amaçlanan kullanımı, nesnenin dizileştirmeye uygun keyfi bir gösterimini
+ tanımlamaktır. Dizinin öğeleri, nesnenin özelliklerine karşılık gelebilir,
+ ancak bu gerekli değildir.
+ </para>
+ <para>
+ <function>unserialize</function> işlevi ise tersine sınıfın
+ <link linkend="object.unserialize">__unserialize()</link> sihirli adına
+ sahip bir işlevinin olup olmadığına bakar. Varsa, bu işlev
+ <link linkend="object.serialize">__serialize()</link> işlevinden
+ döndürülen geri yüklenmiş diziye aktarılır. Daha sonra nesnenin
+ özelliklerini uygun şekilde bu diziden geri yükleyebilir.
+ </para>
+ <note>
+ <para>
+ Aynı nesnede hem <link linkend="object.unserialize">__unserialize()</link>
+ hem de <link linkend="object.wakeup">__wakeup()</link> tanımlanmışsa,
+ yalnızca <link linkend="object.unserialize">__unserialize()</link>
+ çağrılır. <link linkend="object.wakeup">__wakeup()</link> ise yok sayılır.
+ </para>
+ </note>
+ <note>
+ <para>
+ Özellik PHP 7.4.0'dan beri kullanılabilmektedir.
+ </para>
+ </note>
+ <example>
+ <title>- Dizileştirme ve Nesneleştirme</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Connection
+{
+ protected $link;
+ private $dsn, $username, $password;
+
+ public function __construct($dsn, $username, $password)
+ {
+ $this->dsn = $dsn;
+ $this->username = $username;
+ $this->password = $password;
+ $this->connect();
+ }
+
+ private function connect()
+ {
+ $this->link = new PDO($this->dsn, $this->username, $this->password);
+ }
+
+ public function __serialize(): array
+ {
+ return [
+ 'dsn' => $this->dsn,
+ 'user' => $this->username,
+ 'pass' => $this->password,
+ ];
+ }
+
+ public function __unserialize(array $data): void
+ {
+ $this->dsn = $data['dsn'];
+ $this->username = $data['user'];
+ $this->password = $data['pass'];
+
+ $this->connect();
+ }
+}?>
+]]>
+ </programlisting>
+ </example>
+ </sect2>
+
+
<sect2 xml:id="language.oop5.magic.tostring">
<title><link linkend="object.tostring">__toString()</link></title>
+
<methodsynopsis xml:id="object.tostring">
- <modifier>public</modifier> <type>string</type><methodname>__toString</methodname>
+ <modifier>public</modifier>
+ <type>string</type><methodname>__toString</methodname>
<void/>
</methodsynopsis>
+
<para>
<link linkend="object.tostring">__toString()</link> yöntemi, sınıf bir
dizgeye dönüştürüldüğünde sınıfın nasıl tepki vereceğine karar vermeyi
@@ -142,9 +265,8 @@ class Bağlantı
</para>
<warning>
<simpara>
- You cannot throw an exception from within a
<link linkend="object.tostring">__toString()</link> yöntemin içinden
- bir istisna oluşturamazsınız. Bunu yapılması ölümcül hata ile
+ bir istisna yavrulatılamaz. Bunun yapılması ölümcül hata ile
sonuçlanır.
</simpara>
</warning>
@@ -198,10 +320,12 @@ Merhaba
<sect2 xml:id="language.oop5.magic.invoke">
<title><link linkend="object.invoke">__invoke()</link></title>
+
<methodsynopsis xml:id="object.invoke">
<type>mixed</type><methodname>__invoke</methodname>
- <methodparam choice="opt"><parameter>...</parameter></methodparam>
+ <methodparam rep="repeat"><parameter>values</parameter></methodparam>
</methodsynopsis>
+
<para>
<link linkend="object.invoke">__invoke()</link> yöntemi, bir betik bir nesneyi bir işlev olarak çağırmaya çalışırsa çağrılır.
</para>
@@ -240,10 +364,13 @@ bool(true)
<sect2 xml:id="language.oop5.magic.set-state">
<title><link linkend="object.set-state">__set_state()</link></title>
+
<methodsynopsis xml:id="object.set-state">
- <modifier>static</modifier> <type>object</type><methodname>__set_state</methodname>
+ <modifier>static</modifier>
+ <type>object</type><methodname>__set_state</methodname>
<methodparam><type>array</type><parameter>özellikler</parameter></methodparam>
</methodsynopsis>
+
<para>
Bu <link linkend="language.oop5.static">statik</link> yöntem, PHP 5.1.0
sürümünden beri <function>var_export</function> tarafından ihraç edilen
@@ -317,10 +444,12 @@ object(A)#2 (2) {
<sect2 xml:id="language.oop5.magic.debuginfo">
<title><link linkend="object.debuginfo">__debugInfo()</link></title>
+
<methodsynopsis xml:id="object.debuginfo">
<type>array</type><methodname>__debugInfo</methodname>
<void/>
</methodsynopsis>
+
<para>
Gösterilmesi gereken özelliklerini döndürmek için bir nesne
dökümleneceği zaman bu yöntem <function>var_dump</function> tarafından
@@ -330,7 +459,7 @@ object(A)#2 (2) {
Bu özellik PHP 5.6.0 sürümünde eklendi.
</para>
<example>
- <title><link linkend="object.debuginfo">__debugInfo()</link>
+ <title>- <link linkend="object.debuginfo">__debugInfo()</link>
kullanımı</title>
<programlisting role="php">
<![CDATA[
diff --git a/language/oop5/overloading.xml b/language/oop5/overloading.xml
index 04be7bfa..20792fae 100644
--- a/language/oop5/overloading.xml
+++ b/language/oop5/overloading.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 7850a1abc67b583007309a3c2fcaf5c8908b13c9 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 0c9761150371fbf66ded784d20b71ed4f758354e Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, sezer -->
<sect1 xml:id="language.oop5.overloading" xmlns="http://docbook.org/ns/docbook">
<title>Aşırı Yükleme</title>
@@ -99,24 +99,25 @@
</methodsynopsis>
<para>
- <link linkend="object.set">__set()</link> erişilemeyen özelliklere veri
- yazarken çalıştırılır.
+ <link linkend="object.set">__set()</link> erişilemeyen (protected veya
+ private) veya varolmayan özelliklere veri yazarken çalıştırılır.
</para>
<para>
- <link linkend="object.get">__get()</link> erişilemeyen özelliklerden veri
- okurken devreye sokulur.
+ <link linkend="object.get">__get()</link> erişilemeyen (protected veya
+ private) veya varolmayan özelliklerden veri okurken devreye sokulur.
</para>
<para>
- <link linkend="object.isset">__isset()</link> erişilemeyen özellikler için
- <function>isset</function> veya <function>empty</function> çağrıldığında
- tetiklenir.
+ <link linkend="object.isset">__isset()</link> erişilemeyen (protected veya
+ private) veya varolmayan özellikler için <function>isset</function> veya
+ <function>empty</function> çağrıldığında tetiklenir.
</para>
<para>
- <link linkend="object.unset">__unset()</link> erişilemeyen özellikler için
- <function>unset</function> kullanıldığında çağrılır.
+ <link linkend="object.unset">__unset()</link> erişilemeyen (protected veya
+ private) veya varolmayan özellikler için <function>unset</function>
+ kullanıldığında çağrılır.
</para>
<para>
<varname>$isim</varname> değiştirgesi etkileşime girilecek özelliğin
diff --git a/language/oop5/properties.xml b/language/oop5/properties.xml
index 6b879a91..561cdf6c 100644
--- a/language/oop5/properties.xml
+++ b/language/oop5/properties.xml
@@ -1,19 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: fa568719e176d2a678f7d7511b2410ee3b792b90 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 86e6094e86b84a51d00ab217ac50ce8dde33d82a Maintainer: nilgun Status: ready -->
<sect1 xml:id="language.oop5.properties" xmlns="http://docbook.org/ns/docbook">
<title>Özellikler</title>
<para>
- Sınıf üyesi değişkenlere "özellik" denir. Bunlara bazan "öznitelik" veya
- "alan" dendiğini de görürsünüz, fakat bu kılavuzun amaçları doğrultusunda
- biz "özellik" terimini kullanacağız. Bunlar normal değişken bildiriminin
- önüne <literal>public</literal>, <literal>protected</literal>,
- veya <literal>private</literal> anahtar sözcükleri getirilerek bildirilir.
- Bildirim, bir ilklendirme olarak da yapılabilir; bu durumda bir sabit
- değerle ilklendirme yapılmalıdır. Yani, derleme sırasında
- değerlendirilebilmeli, çalışma anında değerlendirilebilecek bilgiler
- içermemelidir.
+ Sınıf üyesi değişkenlere <emphasis>özellik</emphasis> denir. Bunlara
+ bazan <emphasis>öznitelik</emphasis> veya <emphasis>alan</emphasis>
+ dendiğini de görürsünüz, fakat bu kılavuzun amaçları doğrultusunda
+ biz <emphasis>özellik</emphasis> terimini kullanacağız. Bunlar normal
+ değişken bildiriminin önüne <literal>public</literal>,
+ <literal>protected</literal> veya <literal>private</literal> anahtar
+ sözcüklerinden biri ve ardından isteğe bağlı bir tür bildirimi getirilerek
+ bildirilir. Bu bildirim, bir ilklendirme olarak da yapılabilir; bu durumda
+ bir sabit değerle ilklendirme yapılmalıdır. Yani, derleme sırasında
+ değerlendirilebilmeli ve değerlendirilmek için çalışma anı bilgisine
+ bağlı olmamalıdır.
</para>
<para>
<literal>public</literal>, <literal>protected</literal>,
@@ -101,15 +103,17 @@ EOD;
</para>
</note>
- <para>
- PHP 5.3.0 ve sonrasında,
- <link linkend="language.types.string.syntax.nowdoc">Yorumsuz
- metinler</link>, <link linkend="language.types.string.syntax.heredoc">
- yorumlu metinler</link> ve özellik bildirimleri herhangi bir
- statik veri bağlamında kullanılabilir.
- <example>
- <title>- Özellik ilklendirmede yorumsuz metin kullanımı</title>
- <programlisting role="php">
+ <sect2 xml:id="language.oop5.properties.heredoc-nowdoc">
+ <title>Yorumlu ve Yorumsuz Metinler</title>
+ <para>
+ PHP 5.3.0 ve sonrasında,
+ <link linkend="language.types.string.syntax.nowdoc">Yorumsuz
+ metinler</link>, <link linkend="language.types.string.syntax.heredoc">
+ yorumlu metinler</link> ve özellik bildirimleri herhangi bir
+ statik veri bağlamında kullanılabilir.
+ <example>
+ <title>- Özellik ilklendirmede yorumsuz metin kullanımı</title>
+ <programlisting role="php">
<![CDATA[
<?php
class foo {
@@ -123,14 +127,211 @@ EOT;
}
?>
]]>
- </programlisting>
- </example>
- </para>
- <note>
+ </programlisting>
+ </example>
+ </para>
+ <note>
+ <para>
+ Yorumlu ve yorumsuz metin desteği PHP 5.3.0'da eklenmiştir.
+ </para>
+ </note>
+ </sect2>
+
+ <sect2 xml:id="language.oop5.properties.typed-properties">
+ <title>Tür Bildirimleri</title>
<para>
- Yorumlu ve yorumsuz metin desteği PHP 5.3.0'da eklenmiştir.
+ PHP 7.4.0 ve sonrasında özellik tanımı tür bildirimi içerebilmektedir.
+ <example>
+ <title>- Tür ile özellik bildirimi</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class User
+{
+ public int $id;
+ public ?string $name;
+
+ public function __construct(int $id, ?string $name)
+ {
+ $this->id = $id;
+ $this->name = $name;
+ }
+}
+
+$user = new User(1234, null);
+
+var_dump($user->id);
+var_dump($user->name);
+
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+int(1234)
+NULL
+]]>
+ </screen>
+ </example>
</para>
- </note>
+
+ <para>
+ Tür bildirimli özellikler erişilmeden önce ilklendirilmelidir, aksi
+ takdirde bir <classname>Error</classname> yavrulanır.
+ <example>
+ <title>- Özelliklere erişim</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class Shape
+{
+ public int $numberOfSides;
+ public string $name;
+
+ public function setNumberOfSides(int $numberOfSides): void
+ {
+ $this->numberOfSides = $numberOfSides;
+ }
+
+ public function setName(string $name): void
+ {
+ $this->name = $name;
+ }
+
+ public function getNumberOfSides(): int
+ {
+ return $this->numberOfSides;
+ }
+
+ public function getName(): string
+ {
+ return $this->name;
+ }
+}
+
+$triangle = new Shape();
+$triangle->setName("triangle");
+$triangle->setNumberofSides(3);
+var_dump($triangle->getName());
+var_dump($triangle->getNumberOfSides());
+
+$circle = new Shape();
+$circle->setName("circle");
+var_dump($circle->getName());
+var_dump($circle->getNumberOfSides());
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+string(8) "triangle"
+int(3)
+string(6) "circle"
+
+Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be accessed before initialization
+]]>
+ </screen>
+ </example>
+ </para>
+ <sect3 xml:id="language.oop5.properties.typed-properties.valid-types">
+ <title>Geçerli özellik türleri</title>
+ <informaltable>
+ <tgroup cols="3">
+ <thead>
+ <row>
+ <entry>Tür</entry>
+ <entry>Açıklama</entry>
+ <entry>En küçük PHP sürümü</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><type>bool</type></entry>
+ <entry>
+ Özellik <type>bool</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><type>int</type></entry>
+ <entry>
+ Özellik <type>int</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><type>float</type></entry>
+ <entry>
+ Özellik <type>float</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><type>string</type></entry>
+ <entry>
+ Özellik <type>string</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><type>array</type></entry>
+ <entry>
+ Özellik <type>array</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><literal>object</literal></entry>
+ <entry>
+ Özellik <type>object</type> türünde olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><literal>iterable</literal></entry>
+ <entry>
+ Özellik ya <type>array</type> türünde olmalı ya da bir
+ <interfacename>Traversable</interfacename> örneği olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><literal>self</literal></entry>
+ <entry>
+ Özellik tanımlandığı sınıfın bir örneği olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry><literal>parent</literal></entry>
+ <entry>
+ Özellik tanımlandığı sınıfın ebeveyninin bir örneği olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry>Sınıf/arayüz ismi</entry>
+ <entry>
+ Özellik, ismi verilen sınıf veya arayüzün bir örneği olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ <row>
+ <entry>?type</entry>
+ <entry>
+ Özellik belirtilen türde veya &null; olmalıdır.
+ </entry>
+ <entry>PHP 7.4.0</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect3>
+ </sect2>
</sect1>
<!-- Keep this comment at the end of the file
diff --git a/language/oop5/traits.xml b/language/oop5/traits.xml
index a2b76a43..d35d77ac 100644
--- a/language/oop5/traits.xml
+++ b/language/oop5/traits.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 7ee0da6a0250d01f4fd96d3c20d36375137b0b06 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 796ebb7fa127283377acf69fa9a9c3637ae2cd97 Maintainer: nilgun Status: ready -->
<sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook">
<title>Nitelikler</title>
<para>