mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
396 lines
14 KiB
XML
396 lines
14 KiB
XML
<?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
|
||
-->
|