- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,439
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 6 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,092
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
PHP'de hata işleme, PHP kodunda programın karşılaşabileceği çalışma zamanı hatalarını etkili bir şekilde tanımlamak ve bunlardan kurtulmak için bir düzenleme yapmak anlamına gelir. PHP'de hatalar − yardımıyla işlenir.
- die() fonksiyonu
- Hata İşleyici İşlevi
die() Fonksiyonu
die() fonksiyonu PHP'de exit()'in bir takma adıdır. Her ikisi de karşılaşıldığında geçerli PHP betiğinin sonlandırılmasıyla sonuçlanır. Parantez içinde belirtilirse isteğe bağlı bir dize, program sonlandırılmadan önce çıktı olarak verilir.die("message");
Örnek
Aşağıdaki kod, bir PHP betiğinde die()'nin tipik bir kullanımıdır. PHP bir dosya bulamazsa Dosya bulunamadı mesajını görüntüler, aksi takdirde sonraki işleme için dosyayı açar.
PHP:
<?php
if(!file_exists("nosuchfile.txt")) {
die("File not found");
} else {
$file = fopen("nosuchfile","r");
print "Opend file sucessfully";
// Rest of the code here.
fclose($file);
}
?>
Aşağıdaki çıktıyı üretecektir:
File not found
Yukarıdaki tekniği kullanarak, programınızda hata oluştuğunda onu durdurabilir ve PHP'nin ölümcül hata mesajları üretmesine izin vermek yerine, daha anlamlı ve kullanıcı dostu mesajlar görüntüleyebilirsiniz.
Hata İşleyici İşlevi
Hata işleme için die() kullanmak çirkin ve kötü bir program tasarımı olarak kabul edilir, çünkü site kullanıcıları için çirkin bir deneyime neden olur. PHP, özel bir fonksiyon tanımlayıp hataları işlemek için aday gösterebileceğiniz daha zarif bir alternatif sunar.set_error_handler() fonksiyonunun aşağıdaki parametreleri vardır:
set_error_handler(?callable $callback, int $error_levels = E_ALL): ?callable
İlk parametre, bir hatayla karşılaşıldığında otomatik olarak çağrılan kullanıcı tanımlı bir fonksiyondur.
Özel hata işleyici geri çağırma işlevi aşağıdaki parametrelere sahip olmalıdır:
handler(
int $errno,
string $errstr,
string $errfile = ?,
int $errline = ?,
array $errcontext = ?
): bool
Parametreler
| Parametre | Önemi | Tanım |
|---|---|---|
| errno | Gerekli | Kullanıcı tanımlı hata için hata seviyesini belirtir. Sayısal değer olmalıdır. |
| errstr | Gerekli | Kullanıcının tanımladığı hataya ait hata mesajını belirtir. |
| errfile | İsteğe bağlı | Hatanın oluştuğu dosyanın adını belirtir. |
| errline | İsteğe bağlı | Hatanın oluştuğu satır numarasını belirtir. |
| errcontext | İsteğe bağlı | Hata oluştuğunda kullanımda olan değişkenleri ve değerlerini içeren bir dizi belirtir. |
Geri çağırma fonksiyonu false döndürürse varsayılan hata çağrılacaktır.
$ errno, önceden tanımlanmış hata seviyelerine karşılık gelen bir tam sayıdır.
| Sr.No | Sabit ve Açıklama | Değer |
|---|---|---|
| 1 | E_ERROR (int) Kurtarılamayan ölümcül çalışma zamanı hataları. Komut dosyasının yürütülmesi durduruldu. | 1 |
| 2 | E_WARNING (int) Çalışma zamanı uyarıları (ölümcül olmayan hatalar). Komut dosyasının yürütülmesi durdurulmaz. | 2 |
| 3 | E_PARSE (int) Derleme zamanı ayrıştırma hataları. Ayrıştırma hataları yalnızca ayrıştırıcı tarafından oluşturulmalıdır. | 4 |
| 4 | E_NOTICE (int) Çalışma zamanı bildirimleri. Bir hatayı gösterebilecek, ancak bir betiğin normal çalışması sırasında da gerçekleşebilecek bir şey. | 8 |
| 5 | E_CORE_ERROR (int) PHP'nin ilk başlatılması sırasında oluşan ölümcül hatalar. Bu bir E_ERROR'a benzer. | 16 |
| 6 | E_CORE_WARNING (int) Warnings (non-fatal errors) that occur during PHP's initial startup. This is like an E_WARNING, | 32 |
| 7 | E_COMPILE_ERROR (int) PHP'nin ilk başlatılması sırasında oluşan uyarılar (ölümcül olmayan hatalar). Bu bir E_WARNING gibidir. | 64 |
| 8 | E_COMPILE_WARNING (int) Ölümcül derleme zamanı hataları. Bu bir E_ERROR gibidir. | 128 |
| 9 | E_USER_ERROR (int) Derleme zamanı uyarıları (ölümcül olmayan hatalar). Bu bir E_WARNING gibidir. | 256 |
| 10 | E_USER_WARNING (int) Kullanıcı tarafından oluşturulan hata mesajı. Bu , PHP kodunda PHP fonksiyonu trigger_error() kullanılarak oluşturulan bir E_ERROR'a benzer. | 512 |
| 11 | E_USER_NOTICE (int) Kullanıcı tarafından oluşturulan bildirim mesajı. Bu , PHP kodunda trigger_error() fonksiyonu kullanılarak oluşturulan bir E_NOTICE'e benzer. | 1024 |
| 12 | E_STRICT (int) Kodunuzun en iyi şekilde birlikte çalışmasını ve ileriye dönük uyumluluğunu garanti altına almak için PHP'nin kodunuzda değişiklikler önermesini etkinleştirin. | 2048 |
| 13 | E_RECOVERABLE_ERROR (int) Yakalanabilir ölümcül hata. Hata kullanıcı tanımlı bir işleyici tarafından yakalanmazsa, uygulama bir E_ERROR olduğu için sonlandırılır. | 4096 |
| 14 | E_DEPRECATED (int) Çalışma zamanı bildirimleri. Gelecekteki sürümlerde çalışmayacak kod hakkında uyarılar almak için bunu etkinleştirin. | 8192 |
| 15 | E_USER_DEPRECATED (int) Kullanıcı tarafından oluşturulan uyarı mesajı. Bu , PHP kodunda trigger_error() fonksiyonu kullanılarak oluşturulan bir E_DEPRECATED gibidir. | 16384 |
| 16 | E_ALL (int) Tüm hatalar, uyarılar ve bildirimler. | 32767 |
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
error_reporting(E_ERROR);
function myerrorhandler($errno, $errstr) {
echo "error No: $errno Error message: $errstr" . PHP_EOL;
echo "Terminating PHP script";
die();
}
set_error_handler("myerrorhandler");
$f = fopen("nosuchfile.txt", "r");
echo "file opened successfully";
// rest of the code
fclose($f);
?>
Aşağıdaki çıktıyı üretecektir:
error No: 2 Error message: fopen(nosuchfile.txt): Failed to open stream: No
such file or directory
Terminating PHP script
PHP'nin hata sınıfı hiyerarşisi atılabilir arayüzden başlar. PHP'deki tüm önceden tanımlanmış Hata sınıfları Hata sınıfından miras alınır.
ArithmeticError Sınıfı
ArithmeticError sınıfı Error sınıfından miras alınmıştır. Bu tür hatalar negatif miktarda bitsel kaydırma işlemi gibi belirli matematiksel işlemleri gerçekleştirirken oluşabilir.Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
try {
$a = 10;
$b = -3;
$result = $a << $b;
}
catch (ArithmeticError $e) {
echo $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Bit shift by negative number
Bu hata, intdiv() fonksiyonuna yapılan çağrının, tam sayının meşru sınırlarının ötesinde bir değerle sonuçlanması durumunda da oluşur.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
try {
$a = PHP_INT_MIN;
$b = -1;
$result = intdiv($a, $b);
echo $result;
}
catch (ArithmeticError $e) {
echo $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Division of PHP_INT_MIN by -1 is not an integer
DivisionByZeroError
DivisionByZeroError sınıfı ArithmeticError sınıfının bir alt sınıfıdır. Bu tür hata, bölme işleminde paydanın değeri sıfır olduğunda oluşur.Örnek: Modulo by Zero
Aşağıdaki örneğe bir göz atın:
PHP:
<?php
try {
$a = 10;
$b = 0;
$result = $a%$b;
echo $result;
}
catch (DivisionByZeroError $e) {
echo $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Modulo by zero
Bu durum, bir modül operatörünün (%) ikinci operatörü 0 olduğunda ve intdiv() fonksiyonunun ikinci argümanı 0 olduğunda da meydana gelebilir.
Örnek: Sıfıra Bölme
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
try {
$a = 10;
$b = 0;
$result = $a/$b;
echo $result;
}
catch (DivisionByZeroError $e) {
echo $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Division by zero
ArgumentCountError
PHP ayrıştırıcısı, kullanıcı tarafından tanımlanan bir fonksiyona veya yönteme geçirilen argümanlar, tanımındakilerden az olduğunda ArgumentCountError hatası verir.Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
function add($x, $y) {
return $x+$y;
}
try {
echo add(10);
}
catch (ArgumentCountError $e) {
echo $e->getMessage();
}
?>
Aşağıdaki çıktıyı üretecektir:
Too few arguments to function add(), 1 passed in C:\xampp\php\test.php on line 9 and exactly 2 expected
Tür Hatası
Bu hata, gerçek ve resmi argüman tipleri eşleşmediğinde, dönüş tipi beyan edilen döndürülen tiple uyuşmadığında ortaya çıkar.Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
function add(int $first, int $second) {
echo "addition: " . $first + second;
}
try {
add('first', 'second');
}
catch (TypeError $e) {
echo $e->getMessage(), "";
}
?>
Aşağıdaki çıktıyı üretecektir:
add(): Argument #1 ($first) must be of type int, string given,
called in /home/cg/root/63814/main.php on line 7
TypeError, PHP'nin yerleşik işlevine yanlış sayıda argüman geçirildiğinde de fırlatılır. Ancak, "strict_types=1" yönergesi başlangıçta ayarlanmalıdır.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
declare(strict_types=1);
try {
echo pow(100,2,3);
}
catch (TypeError $e) {
echo $e->getMessage(), "";
}
?>
Aşağıdaki çıktıyı üretecektir :
pow() expects exactly 2 parameters, 3 given
PHP'de İstisnaların İşlenmesi
PHP'nin diğer programlama dillerine benzer bir istisna modeli vardır. İstisnalar önemlidir ve hata işleme üzerinde daha iyi bir kontrol sağlar.İstisnalarla ilgili yeni anahtar kelimeyi açıklayalım.
- Try − Bir istisna kullanan bir fonksiyon bir "try" bloğunda olmalıdır. İstisna tetiklenmezse, kod normal şekilde devam edecektir. Ancak istisna tetiklenirse, bir istisna "atılır".
- Throw − Bu, bir istisnayı nasıl tetiklediğinizdir. Her "throw" en az bir "catch"e sahip olmalıdır.
- Catch − Bir "catch" bloğu bir istisnayı alır ve istisna bilgisini içeren bir nesne oluşturur.
- Bir istisna atılabilir ve PHP içinde yakalanabilir ("yakalandı"). Kod bir try bloğunun içine alınabilir.
- Her denemenin en az bir tane karşılık gelen catch bloğu olmalıdır. Farklı istisna sınıflarını yakalamak için birden fazla catch bloğu kullanılabilir.
- İstisnalar bir catch bloğu içerisinde atılabilir (veya tekrar atılabilir).
Örnek
Aşağıda kod parçası bulunmaktadır, bu kodu kopyalayıp bir dosyaya yapıştırın ve sonucu kontrol edin.
PHP:
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "";
}
// Continue execution
echo 'Hello World';
?>
Yukarıdaki örnekte $e->getMessage fonksiyonu hata mesajını almak için kullanılır. Exception sınıfından kullanılabilecek aşağıdaki fonksiyonlar vardır.
- getMessage() − istisna mesajı
- getCode() − istisna kodu
- getFile() − kaynak dosya adı
- getLine() − kaynak satırı
- getTrace() − backtrace()'in n dizisi
- getTraceAsString() − iz biçimlendirilmiş dizesi
Özel İstisna İşleyicisi Oluşturma
Kendi özel istisna işleyicinizi tanımlayabilirsiniz. Kullanıcı tanımlı bir istisna işleyici işlevi ayarlamak için aşağıdaki işlevi kullanın.string set_exception_handler ( callback $exception_handler )
Burada exception_handler, yakalanmamış bir istisna oluştuğunda çağrılacak fonksiyonun adıdır. Bu fonksiyon, set_exception_handler() çağrılmadan önce tanımlanmalıdır.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed";
?>