1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 15:22:23 +01:00
Files
archived-doc-tr/reference/errorfunc/functions/set-error-handler.xml
2023-01-29 10:27:09 +03:00

396 lines
14 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 23906aa9f613d0f67538e4292b220cebf624d5f2 Maintainer: nilgun Status: ready -->
<refentry xml:id="function.set-error-handler" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>set_error_handler</refname>
<refpurpose>Kullanıcı tanımlı bir hata işleyici bildirir</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>callable</type><type>null</type></type>
<methodname>set_error_handler</methodname>
<methodparam><type class="union"><type>callable</type><type>null</type></type><parameter>hata_işleyici</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>hata_seviyeleri</parameter><initializer><constant>E_ALL</constant></initializer></methodparam>
</methodsynopsis>
<para>
Betikteki hatalarda devreye girmek üzere kullanıcı tanımlı bir işlev
(<parameter>hata_işleyici</parameter>) bildirir.
</para>
<para>
Bu işlev çalışma anında özel bir hata işleyici oluşturmakta kullanılabilir.
Örneğin, veriler veya dosyalar temizlenirken işlemlerin durmasına yol
açacak bir hata oluştuğunda veya belli durumlar için
(<function>trigger_error</function> ile) bir hatayı tetiklemek gerektiğinde
PHP tarafından çağrılacak bir işlev tanımlayıp, bu işlevin ismi
<function>set_error_handler</function> ile PHP'ye bildirilebilir.
</para>
<para>
Bu işlevin çağrılmasıyla PHP'nin standart hata işleyicisi
<parameter>hata_seviyeleri</parameter> ile belirtilen hata türleri için,
geri çağırım işlevi &false; döndürmedikçe tamamen devre dışı kalacaktır.
<function>error_reporting</function> ayarları etkisiz
olacak ve her durumda belirtilen hata işleyisi çağrılacaktır. Ancak,
<link linkend="ini.error-reporting">error_reporting</link> yönergesindeki
değer hala okubabilir ve buna göre davranılabilir.
</para>
<para>
Ayrıca, gerektiği takdirde <function>exit</function> işlevini çağırarak
betiğin çalışmasını durdurmak da işleyicinin sorumluluğundadır.
<parameter>hata_işleyici</parameter> işlevi döndükten sonra betiğin
çalışması, hataya sebep olan deyimden sonraki deyimden devam edecektir.
</para>
<para>
Kullanıcı tanımlı bir işlev ile üzerinde herhangi bir işlem yapılamayacak
hatalar vardır, bunlar: <constant>E_ERROR</constant>,
<constant>E_PARSE</constant>, <constant>E_CORE_ERROR</constant>,
<constant>E_CORE_WARNING</constant>, <constant>E_COMPILE_ERROR</constant>,
üretidiği yerden bağımsız <constant>E_COMPILE_WARNING</constant> ve
<function>set_error_handler</function> işlevinin çağrıldığı dosyada oluşan
<constant>E_STRICT</constant> hatalarının çoğu.
</para>
<para>
Eğer betik çalıştırılmadan önce oluşan hatalar varsa (karşıya dosya yükleme
sırasında oluşan hatalar gibi), bu gibi durumlar için bildirilen
<parameter>hata_işleyici</parameter> işlevi çağrılamayacaktır.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>hata_işleyici</parameter></term>
<listitem>
<para>
İşleve &null; aktarılırsa işleyici öntanımlı durumuna sıfırlanır.
Aksi takdirde, aşağıdaki geri çağırım işlevi tanımıyla bir işleyici
aktarılmalıdır:
</para>
<para>
<methodsynopsis>
<type>bool</type><methodname><replaceable>hata_işleyici</replaceable></methodname>
<methodparam><type>int</type><parameter>errno</parameter></methodparam>
<methodparam><type>string</type><parameter>errstr</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>errfile</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>errline</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>errcontext</parameter></methodparam>
</methodsynopsis>
<variablelist>
<varlistentry>
<term><parameter>errno</parameter></term>
<listitem>
<simpara>
Oluşan hatanın seviyesinin bir tamsayı olarak aktarılacağı
bağımsız değişken. İlk bağımsız değişken olmalıdır.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errstr</parameter></term>
<listitem>
<simpara>
Hata iletisinin bir dizge olarak aktarılacağı bağımsız değişken.
İkinci bağımsız değişken olmalıdır.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errfile</parameter></term>
<listitem>
<simpara>
<parameter>hata_işleyici</parameter> 3 bağımsız değişken kabul
ediyorsa, hatanın oluştuğu betik dosyasının ismini bir dizge olarak
içerecek, belirtilmesi isteğe bağlı üçüncü bağımsız değişken.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errline</parameter></term>
<listitem>
<simpara>
<parameter>hata_işleyici</parameter> 4 bağımsız değişken kabul
ediyorsa, hatanın oluştuğu deyimin satır numarasını bir tamsayı
olarak içerecek, belirtilmesi isteğe bağlı dördüncü bağımsız
değişken.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errcontext</parameter></term>
<listitem>
<simpara>
<parameter>hata_işleyici</parameter> 5 bağımsız değişken kabul
ediyorsa, hatanın oluştuğu noktada etkin simge tablosuna işaret eden
bir diziyi kabul edecek, belirtilmesi isteğe bağlı beşinci bağımsız
değişken. Bu bağımsız değişken, başka bir deyişle, hatanın
tetiklendiği etki alanında etkin değişkenleri içeren bir dizidir.
<parameter>hata_işleyici</parameter> bu değişkenlerde bir değişiklik
yapmamalıdır.
</simpara>
<warning xmlns="http://docbook.org/ns/docbook">
<simpara>
Bu bağımsız değişken PHP 7.2.0 ve sonrasında
<emphasis>kullanımdan</emphasis> kaldırılmıştır. PHP 8.0.0'da
<emphasis>tamanen</emphasis> kaldırılmıştır. Eğer işlev bu
bağımsız değişkeni bir öntanımlı değer olmaksızın tanımlıyorsa,
işlev çağrıldığı takdirde, "too few arguments" (çok az bağımsız
değişken) hatası oluşur.
</simpara>
</warning>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
İşlev &false; döndürdüğü takdirde normal hata işleyici kaldığı yerden
devam eder.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>hata_seviyeleri</parameter></term>
<listitem>
<para>
<parameter>hata_işleyici</parameter> işlevini tetikleyecek hatalar
sabitleriyle, <link linkend="ini.error-reporting">
error_reporting</link> yönergesine gösterilecek hataların değerleri
belirtilirken yapıldığı gibi bir bit maskesi olarak belirtilebilir. Bu
maskenin belirtilmediği durumda, <link linkend="ini.error-reporting">
error_reporting</link> yönergesinde belirtilen değere bakılmaksızın her
hatada <parameter>hata_işleyici</parameter> işlevi çağrılacaktır.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
(Varsa) Evvelce tanımlanmış hata işleyicinin ismini dizge olarak
döndürür. Eğer yerleşik bir hata işleyici kullanılmışsa &null; döner.
Eğer evvelki hata işleyici bir sınıfın yöntemi ise bu sınıfın ve yöntemin
isimlerini içeren bir dizi döner.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>errcontext</parameter> kaldırıldı ve artık kullanıcının
geri çağırım işlevine aktarılmayacak.
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
<parameter>errcontext</parameter> kullanımdan kaldırıldı. Bu
bağımsız değişkenin kullanımı bir <constant>E_DEPRECATED</constant>
üretilmesine sebep olur.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>- <function>set_error_handler</function> ve
<function>trigger_error</function> ile hataların ele alınması</title>
<para>
Bu örnekte hatalar tetiklenerek oluşan dahili istisnaların kullanıcı
tanımlı bir işlev ile ele alınması gösterilmiştir.
</para>
<programlisting role="php">
<![CDATA[
<?php
// hata işleyici işlevi
function hataİşleyicim($hatanum, $ileti, $betik, $satırnum)
{
if (!(error_reporting() & $hatanum)) {
// Bu hata kodu error_reporting'e dahil olmaz, bu yüzden
// standart PHP hata işleyicisine düşmesine izin verin
return false;
}
// $ileti önceleme gerektirebilir
$ileti = htmlspecialchars($ileti);
switch ($hatanum) {
case E_USER_ERROR:
echo "<b>HATA</b> [$hatanum] $ileti<br />\n";
echo " $betik dosyasının $satırnum. satırında ölümcül hata";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Çıkılıyor...<br />\n";
exit(1);
case E_USER_WARNING:
echo "<b>UYARI</b> [$hatanum] $ileti<br />\n";
break;
case E_USER_NOTICE:
echo "<b>BİLGİ</b> [$hatanum] $ileti<br />\n";
break;
default:
echo "Bilinmeyen hata türü: [$hatanum] $ileti<br />\n";
break;
}
/* PHP'nin yerleşik hata işleyici çalışmasın */
return true;
}
// Hatanın oluşacağı işlev
function scale_by_log($vect, $scale)
{
if (!is_numeric($scale) || $scale <= 0) {
trigger_error("x <= 0 için log(x) tanımsız, scale = $scale verilmiş",
E_USER_ERROR);
}
if (!is_array($vect)) {
trigger_error("Yanlış girdi, değerler dizi olarak verilmeliydi",
E_USER_WARNING);
return null;
}
$temp = array();
foreach($vect as $pos => $value) {
if (!is_numeric($value)) {
trigger_error("$pos. değer bir sayı değil, 0 kullanılıyor",
E_USER_NOTICE);
$value = 0;
}
$temp[$pos] = log($scale) * $value;
}
return $temp;
}
// kullanıcı tanımlı hata işleyiciyi bildir
$old_error_handler = set_error_handler("hataİşleyicim");
// Bazı hataları tetikle.
// Önce sayısal olmayan bir eleman içeren bir dizi tanımla.
echo "ilk durum; bir hata: sayı yerine dizge\n";
$a = array(2, 3, "foo", 5.5, 43.3, 21.11);
print_r($a);
// burada ikinci hatayı üret
echo "----\nikinci durum - bir uyarı (b = log(PI) * a)\n";
/* $pos. değer bir sayı değil, 0 kullanılıyor */
$b = scale_by_log($a, M_PI);
print_r($b);
// Bir dizi yerine bir dizge aktarıp yine sorun çıkar
echo "----\nüçüncü durum - bir uyarı\n";
/* Yanlış girdi, değerler dizi olarak verilmeliydi */
$c = scale_by_log("not array", 2.3);
var_dump($c); // NULL
// Bu önemli bir hata; sıfır veya negatif bir sayının logaritması.
echo "----\ndördüncü durum - ölümcül hata\n";
/* x <= 0 için log(x) tanımsız, scale = $scale olmalıydı */
$d = scale_by_log($a, -2.5);
var_dump($d); // Bu satır hiç çalışmayacak.
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
ilk durum; bir hata: sayı yerine dizge
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
ikinci durum - bir uyarı (b = log(PI) * a)
<b>BİLGİ</b> [1024] 2. değer bir sayı değil, 0 kullanılıyor<br />
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
üçüncü durum - bir uyarı
<b>UYARI</b> [512] Yanlış girdi, değerler dizi olarak verilmeliydi<br />
NULL
----
dördüncü durum - ölümcül hata
<b>HATA</b> [256] x <= 0 için log(x) tanımsız, scale = -2.5 verilmiş<br />
php-dnm dosyasının 36. satırında ölümcül hata, PHP 5.3.0beta2-dev
(Linux)<br />
Çıkılıyor...<br />
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><classname>ErrorException</classname></member>
<member><function>error_reporting</function></member>
<member><function>restore_error_handler</function></member>
<member><function>trigger_error</function></member>
<member><link linkend="errorfunc.constants">Hata seviyesi
sabitleri</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->