Ben aşağıdaki gibi bazı fonksiyonların önünde @
kullanarak gördük:
$fileHandle = @fopen($fileName, $writeAttributes);
Bu sembolün kullanımı nedir?
Bu hata iletileri bastırır - PHP kılavuzunda Error Control Operators bkz.
Bu hataları bastırır.
http://uk.php.net/manual/en/language.operators.errorcontrol.php
@
sembolü error control operator ("sessizlik" ya da "kapa çeneni" operatörü aka). PHP bastırmak ilişkili ekspresyon tarafından oluşturulan hata mesajları (haber, uyarı, ölümcül, vb) yapar. Bu örneğin, bir öncelik ve birleşim vardır, sadece bir tekli operatör gibi çalışır. Aşağıda bazı örnekler şunlardır:
@echo 1 / 0;
// generates "Parse error: syntax error, unexpected T_ECHO" since
// echo is not an expression
echo @(1 / 0);
// suppressed "Warning: Division by zero"
@$i / 0;
// suppressed "Notice: Undefined variable: i"
// displayed "Warning: Division by zero"
@($i / 0);
// suppressed "Notice: Undefined variable: i"
// suppressed "Warning: Division by zero"
$c = @$_POST["a"] + @$_POST["b"];
// suppressed "Notice: Undefined index: a"
// suppressed "Notice: Undefined index: b"
$c = @foobar();
echo "Script was not terminated";
// suppressed "Fatal error: Call to undefined function foobar()"
// however, PHP did not "ignore" the error and terminated the
// script because the error was "fatal"
Yerine standart PHP hata işleyicisi bir özel hata işleyicisi kullandığınızda tam olarak ne olur:
If you have set a custom error handler function with set_error_handler() then it will still get called, but this custom error handler can (and should) call error_reporting() which will return 0 when the call that triggered the error was preceded by an @.
Bu, aşağıdaki kod örnekte gösterilmiştir:
function bad_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
echo "[bad_error_handler]: $errstr";
return true;
}
set_error_handler("bad_error_handler");
echo @(1 / 0);
// prints "[bad_error_handler]: Division by zero"
@
sembolü yürürlükte olsaydı hata işleyicisi onay vermedi. Manuel aşağıdaki önerir:
function better_error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
if(error_reporting() !== 0) {
echo "[better_error_handler]: $errstr";
}
// take appropriate action
return true;
}