com doc/tr: Closes php/doc-tr#1: language/exceptions.xml
[email protected] (Nilgün Belma Bugüner) Mon, 04 Jan 2021 06:29:34 +0000
| Newsgroups | php.doc.tr |
|---|---|
| Message-ID | <[email protected]> |
Commit: b595b91d992290a51824dea8d905e7478742c3a7 Author: Nilgün Belma Bugüner <[email protected]> Mon, 4 Jan 2021 08:35:34 +0300 Parents: 52db167765671c6c942b736f5d36285ae35d4b29 Branches: master Link: http://git.php.net/?p=doc/tr.git;a=commitdiff;h=b595b91d992290a51824dea8d905e7478742c3a7 Log: Closes php/doc-tr#1 Bugs: https://bugs.php.net/1 Changed paths: M language/exceptions.xml
diff_b595b91d992290a51824dea8d905e7478742c3a7.txt
(text/plain, 10.2 KB)
diff --git a/language/exceptions.xml b/language/exceptions.xml
index 1f483563..47c0a8e6 100644
--- a/language/exceptions.xml
+++ b/language/exceptions.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 3d1b737b25cfb0b7e4a8750def40d23d19fe2161 Maintainer: nilgun Status: ready -->
+<!-- EN-Revision: 1d58f726462a821d3f926fb61247357f49fa1ce5 Maintainer: nilgun Status: ready -->
<!-- CREDITS: tpug, dirt, sezer -->
<chapter xml:id="language.exceptions" xmlns="http://docbook.org/ns/docbook">
<title>İstisnalar</title>
@@ -69,8 +69,7 @@ class Exception extends Throwable
</para>
</note>
<example>
- <title>- <classname>Exception</classname> sınıfının genişletilmesi
- (PHP 5.3.0+)</title>
+ <title>- <classname>Exception</classname> sınıfının genişletilmesi</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -187,70 +186,57 @@ echo "\n\n";
?>
]]>
</programlisting>
- <note>
- <para>
- PHP 5.3.0'dan önceki PHP 5 sürümleri iç içe istisnaları desteklemez.
- Aşağıdaki kod parçası bu örneği çalıştırmak isterseniz MyException
- sınıfının yerine kullanılabilir.
- </para>
- <programlisting role="php">
-<![CDATA[
-<?php
-/**
- * İstisnayı denemek için bir sınıf oluşturalım
- */
-class MyException extends Exception
-{
- // İstisnayı yeniden tanımlayalım, böylece ileti seçimlik olmaktan çıkar
- public function __construct($message, $code = 0) {
- // some code
-
- // Herşeyin düzgün olarak atandığından emin olalım
- parent::__construct($message, $code);
- }
-
- // Nesnenin özel dizge gösterimi
- public function __toString() {
- return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
- }
-
- public function customFunction() {
- echo "İstisnanın bu türü için özel işlev\n";
- }
-}
-?>
-]]>
- </programlisting>
- </note>
</example>
</sect1>
<simplesect xml:id="language.exceptions.introduction">
<para>
- PHP 5 diğer programlama dillerindekine benzer bir istisna modeline
+ PHP diğer programlama dillerindekine benzer bir istisna modeline
sahiptir. Bir istisna oluşturulabilir (&throw;) ve yakalanabilir (&catch;).
Olası istisnaların yakalanabilmesi için, kod bir &try; bloğu içine
alınabilir. Her &try; bloğuna karşılık en az bir tane &catch; veya
&finally; bloğu olması gerekir.
</para>
+ <para>
+ Bir istisna oluşturulursa ve geçerli işlev bağlamında &catch; bloğu yoksa,
+ istisna, eşleşen bir &catch; bloğu bulana kadar çağrı yığıtını çağıran
+ işleve "kabarcıklandırır". Yol boyunca karşılaşılan tüm &finally; blokları
+ çalıştırılır. Eğer çağrı yığıtı, eşleşen bir &catch; bloğu bulamadan
+ küresel bağlama kadar boşalırsa ve bir küresel istisna işleyici de
+ atanmamışsa, ölümcül hata vererek sonlanır.
+ </para>
<para>
Oluşturulan nesne ya bir
<classname>Exception</classname> sınıfı ya da
- bir <classname>Exception</classname> alsınıfınıb örneği olmalıdır. Bunu
+ bir <classname>Exception</classname> alt sınıfının örneği olmalıdır. Bunu
sağlamayan bir nesne oluşturmaya çalışmak (&throw;) ölümcül bir PHP
hatasına yol açmaz.
</para>
+ <para>
+ PHP 8.0.0 ve sonrasında, &throw; sözcüğü bir ifade olup herhangi bir
+ ifadenin içinde kullanılabilir. Önceki sürümlerde bir deyimdi ve kendi
+ satırına sahip olması gerekiyordu.
+ </para>
</simplesect>
<simplesect xml:id="language.exceptions.catch">
<title><literal>catch</literal></title>
<para>
+ Bir &catch; bloğu oluşturulan bir istisnaya nasıl yanıt verileceğini
+ tanımlar. Bir &catch; bloğu işleyebileceği bir veya daha fazla istisna
+ veya hata türünü ve isteğe bağlı olarak istisnanın atanacağı değişkeni
+ tanımlar. (PHP 8.0.0 öncesinde değişken gerekliydi.) İlk &catch; bloğu,
+ nesneyi işleyecek &throw; nesnesinin türüyle eşleşen bir hata veya
+ istisnayla karşılaştığında bunları engelleyecektir.
+ </para>
+ <para>
Farklı sınıflara ait istisnaları yakalamak için birden fazla &catch; bloğu
kullanılabilir. Normal çalışma sıradaki son &catch; bloğundan sonra devam
eder. Buradaki normal çalışma (&try; bloğu içinde hiçbir istisna
- oluşmadığında) sıradaki tanımlanmış son &catch;
- bloğundan sora devam eder. İstisnalar bir &catch; bloğu içerisinde oluşmuş
- olabileceği gibi yeniden de oluşabilir (&throw;).
+ oluşmadığında) sıradaki tanımlanmış son &catch; bloğundan sora devam eder.
+ İstisnalar bir &catch; bloğu içerisinde oluşmuş olabileceği gibi yeniden
+ de oluşabilir (&throw;). Aksi takdirde, çalışma, tetiklenen &catch;
+ bloğundan sonra devam eder.
</para>
<para>
Bir istisna oluştuğunda, istisnanın oluştuğu yerden sonraki kodlar
@@ -262,22 +248,47 @@ class MyException extends Exception
iletisi çıktılar.
</para>
<para>
- PHP 7.1 ve sonrasında, boru (<literal>|</literal>) karakteri kullanarak bir
- &catch; bloğunda çok sayıda istisna belirtilebilir. Farklı sınıf
+ PHP 7.1.0 ve sonrasında, boru (<literal>|</literal>) karakteri kullanarak
+ bir &catch; bloğunda çok sayıda istisna belirtilebilir. Farklı sınıf
hiyerarşilerindeki farklı istisnalar aynı şekilde elde edildiğinde
kullanışlıdır.
</para>
+ <para>
+ PHP 8.0.0 ve sonrasında, değişken ismi yakalama istisnası için isteğe
+ bağlıdır. Belirtilmezse, &catch; bloğu çalışmaya yine de devam eder fakat
+ istisnayı oluşturacak nesneye erişemez.
+ </para>
</simplesect>
<simplesect xml:id="language.exceptions.finally">
<title><literal>finally</literal></title>
<para>
- PHP 5.5 ve sonrasında &catch; bloklarının yerine veya sonrasında bir
+ &catch; bloklarının yerine veya sonrasında bir
&finally; bloğu da belirtilebilir. Bir istisnanın oluşmamışsa bile ve
normal çalışmaya dönülmeden önce &finally; bloğu içindeki kodlar daima
&try; ve &catch; bloklarından sonra çalıştırılır.
</para>
- </simplesect>
+ <para>
+ Dikkate değer tek etkileşim, &finally; bloğu ile &return; deyimi arasında
+ olur. &try; veya &catch; bloklarının içinde bir &return; deyimine
+ rastlansa bile &finally; bloğu çalışmasına devam edeceği gibi, &return;
+ deyimi de çalıştırılır fakat &finally; bloğu işini bitirdikten sonra sonuç
+ döndürülür. Ek olarak, &finally; bloğu da bir &return; içeriyorsa
+ &finally; bloğundaki değer döndürülür.
+ </para>
+ </simplesect>
+
+ <simplesect xml:id="language.exceptions.exception-handler">
+ <title><literal>Küresel istisna işleyici</literal></title>
+ <para>
+ Eğer bir istisnanın küresel bağlama kadar kabarcıklanmasına izin verilirse,
+ atandığı takdirde bir küresel istisna işleyici tarafından yakalanabilir.
+ Başka bir blok çalıştırılmazsa bir &catch; bloğu yerine çağrılmak üzere bir
+ işlev <function>set_exception_handler</function> işlevi ile atanabilir.
+ Etkisi esasen, tüm programın, &catch; olarak bu işleve sahip bir &try;-
+ &catch; bloğu ile sarmalanmasıyla aynıdır.
+ </para>
+ </simplesect>
<simplesect xml:id="language.exceptions.notes">
&reftitle.notes;
@@ -289,8 +300,23 @@ class MyException extends Exception
linkend="language.oop5">nesne yönelimli</link> güncel eklentiler
kullanmaktadır. Bununla birlikte hatalar <link
linkend="class.errorexception">ErrorException</link> ile kolayca
- istisnalara dönüştürülebilir.
+ istisnalara dönüştürülebilir. Bununla birlikte, bu teknik sadece ölümcül
+ hatalarda çalışır.
</para>
+ <example>
+ <title>- Hata raporlamayı istisnalara dönüştürme örneği</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+function exceptions_error_handler($severity, $message, $filename, $lineno) {
+ throw new ErrorException($message, 0, $severity, $filename, $lineno);
+}
+
+set_error_handler('exceptions_error_handler');
+?>
+]]>
+ </programlisting>
+ </example>
</note>
<tip>
<para>
@@ -337,7 +363,7 @@ Merhaba Dünya
</example>
<example>
- <title>- Bir <literal>finally</literal> bloğu ile istisnanın işleme sokulması</title>
+ <title>- Bir &finally; bloğu ile istisnanın işleme sokulması</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -380,6 +406,33 @@ Merhaba Dünya
]]>
</screen>
</example>
+ <example>
+ <title>- &finally; bloğu ile &return; arasındaki etkileşim örneği</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+function test() {
+ try {
+ throw new Exception('foo');
+ } catch (Exception $e) {
+ return 'catch';
+ } finally {
+ return 'finally';
+ }
+}
+
+echo test();
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+finally
+]]>
+ </screen>
+ </example>
<example>
<title>- İç içe istisnalar</title>
<programlisting role="php">
@@ -449,6 +502,50 @@ string(11) "MyException"
]]>
</screen>
</example>
+ <example>
+ <title>- Yakalama değişkeninin olmayışı</title>
+ <para>Sadece PHP 8.0.0 ve sonrası için geçerlidir.</para>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class Özelİstisna extends Exception {}
+
+function test() {
+ throw new Özelİstisna('Oopsie');
+}
+
+try {
+ test();
+} catch (Özelİstisna) {
+ print "Bir Özelİstisna oluştu, fakat ayrıntılar önemsiz.";
+}
+?>
+]]>
+ </programlisting>
+ </example>
+ <example>
+ <title>- Bir ifade olarak throw</title>
+ <para>Sadece PHP 8.0.0 ve sonrası için geçerlidir.</para>
+ <programlisting role="php">
+<![CDATA[
+<?php
+
+class Özelİstisna extends Exception {}
+
+function test() {
+ do_something_risky() or throw new Exception('Çalışmadı...');
+}
+
+try {
+ test();
+} catch (Exception $e) {
+ print $e->getMessage();
+}
+?>
+]]>
+ </programlisting>
+ </example>
</simplesect>
</chapter>