array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.assert.php', 1 => 'assert', ), 'up' => array ( 0 => 'ref.info.php', 1 => 'PHP Seçenek/Bilgi İşlevleri', ), 'prev' => array ( 0 => 'function.assert-options.php', 1 => 'assert_options', ), 'next' => array ( 0 => 'function.cli-get-process-title.php', 1 => 'cli_get_process_title', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/info/functions/assert.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
assert — Savın doğruluğuna bakar
assert() bir işlev değil beklentilerin tanımlanmasını sağlayan bir dil oluşumudur: geliştirme ve deneme ortamlarında yürürlüğe giren, ancak üretimde sıfır maliyetli olacak şekilde en iyilenmiş savlardır.
Savlar yalnızca hata ayıklama özelliği olarak kullanılmalıdır. Bir kullanımı,
her zaman true
olması gereken, aksi takdirde bazı yazılım hatalarını
gösteren ön koşullar için tutarlılık denetimidir. Başka bir kullanımı ise,
eklenti işlevleri veya belirli sistem sınırları ve özellikleri gibi belirli
özelliklerin varlığını sınamaktır.
Sav denetimi devre dışı bırakılabilecek şekilde yapılandırılabileceğinden, girdilerin denetlenmesi gibi normal çalışma zamanı işlemleri için kullanılmamalıdır. Genel bir kural olarak, sav denetimi devre dışı bırakılsa bile kod beklendiği gibi davranmalıdır.
assert() oluşumu, sav
ile belirtilen
beklentinin geçerliliğini sınar.
assert() oluşumunun davranışı aşağıdaki INI ayarları ile değiştirilebilir:
İsim | Öntanımlı | Açıklama | Sürüm Bilgisi |
---|---|---|---|
zend.assertions | 1 |
|
|
assert.active | true |
false ise, assert() beklentiyle ilgilenmez
ve koşulsuz olarak true döndürür.
|
|
assert.callback | null |
Sav başarısız olduğunda çağrılacak kullanıcı tanımlı işlev. Sözdizimi: | PHP 8.0.0 öncesnde, işlevin sözdizimi şöyle olmalıydı: |
assert.exception | 0 |
|
|
assert.bail | false |
true ise, beklenti karşılanmazsa PHP betiğinin yürütülmesini iptal eder.
|
|
assert.warning | true |
true ise, beklenti karşılanmazsa bir E_WARNING
çıktılanır. Bu INI ayarı, assert.exception
etkinleştirilmişse etkisizdir.
|
assert.
ile başlayan seçenekler
assert_options() ile yapıaldırılabilir. Ancak, bu önerilmez.
sav
Çalıştırılacak ve sonucu, savın başarını belirlemekte kullanılacak değeri döndüren bir ifade olmalıdır.
PHP 8.0.0 öncesinde, sav
PHP kodu olarak
yorumlanan ve eval() ile yürütülen bir dizge idi.
Bu dizge geri çağırım işlevine üçüncü bağımsız değişken olarak
aktarılırdı. PHP 7.2.0'da kullanımı artık
ÖNERİLMEMEKTE olup PHP 8.0.0'da
kullanımdan KALDIRILMIŞTIR.
açıklama
açıklama
bir Throwable
örneği ise, yalnızca sav
yürütülüp başarısız
olduğunda yavrulanır.
Bilginize:
PHP 8.0.0 ve sonrasında, bu, olası bir tanımlanmış onaylama geri çağrım işlevi çağrılmadan önce yapılır.
Bilginize:
PHP 8.0.0 ve sonrasında, nesne assert.exception yapılandırmasına bakılmaksızın yavrulanır.
Bilginize:
PHP 8.0.0 ve sonrasında, bu durumda assert.bail etkisizdir.
sav
başarısız olursa başarısızlık iletisine
dahil edilecek isteğe bağlı bir açıklama.
açıklama
bir dizge ise bir istisna veya uyarı
çıktılanırsa kullanılır.
açıklama
kullanılmazsa, derleme zamanında
assert() çağrısı için kaynak koduna eşit öntanımlı
bir açıklama oluşturulur.
istisna
PHP 7'de, ikinci bağımsız değişken açıklayıcı bir dizge yerine bir Throwable nesnesi olabilir; sav başarısız olursa ve assert.exception yapılandırma yönergesi de etkinse bu nesne örneklenir.
Sürüm: | Açıklama |
---|---|
8.0.0 |
açıklama bir Throwable
örneği ise, yalnızca sav yürütülüp başarısız
olduğunda yavrulanır.
|
8.0.0 |
açıklama bir Throwable
örneği ise, atanmış olsa bile geri çağırım işlevi çağrılmaz.
|
8.0.0 |
assert() artık dizge savları değerlendirmeye almıyor,
herhangi bir bağımsız değişken gibi ele alıyor. Örneğin, assert('$a ==
$b') yerine artık assert($a == $b) kullanılması
gerekiyor. assert.quiet_eval php.ini yönergesi ve
ASSERT_QUIET_EVAL sabiti de kaldırıldı ve artık
herhangi bir etkisi olmayacak.
|
8.0.0 |
Bir isim alanı içinde assert() adlı bir işlevin
bildirilmesine artık izin verilmiyor ve böyle bir bildirim olursa
E_COMPILE_ERROR çıktılanıyor.
|
7.3.0 |
Bir isim alanı içinde assert() adlı bir işlev
bildirimi artık önerilmiyor ve böyle bir
bildirim olursa bir E_DEPRECATED uyarısı
veriliyor.
|
7.2.0 |
Sav olarak bir dizge kullanımı artık önerilmiyor.
Artık hem assert.active hem
de zend.assertions için 1
atanmışsa bir E_DEPRECATED uyarısı veriliyor.
|
Örnek 1 - Özel bir sav olmaksızın beklentiler
<?php
assert(true == false);
echo 'Hi!';
?>
zend.assertions yönergesine 0 atandığında yukarıdaki örneğin çıktısı:
Hi!
zend.assertions yönergesine 1 ve assert.exception yönergesine 0 atandığında yukarıdaki örneğin çıktısı:
Warning: assert(): assert(true == false) failed in - on line 2 Hi!
zend.assertions yönergesine 1 ve assert.exception yönergesine 1 atandığında yukarıdaki örneğin çıktısı:
Fatal error: Uncaught AssertionError: assert(true == false) in -:2 Stack trace: #0 -(2): assert(false, 'assert(true == ...') #1 {main} thrown in - on line 2
Örnek 2 - Özel bir sav varken beklentiler
<?php
class CustomError extends AssertionError {}
assert(true == false, new CustomError('True is not false!'));
echo 'Hi!';
?>
zend.assertions yönergesine 0 atandığında yukarıdaki örneğin çıktısı:
Hi!
zend.assertions yönergesine 1 ve assert.exception yönergesine 0 atandığında yukarıdaki örneğin çıktısı:
Warning: assert(): CustomError: True is not false! in -:4 Stack trace: #0 {main} failed in - on line 4 Hi!
zend.assertions yönergesine 1 ve assert.exception yönergesine 1 atandığında yukarıdaki örneğin çıktısı:
Fatal error: Uncaught CustomError: True is not false! in -:4 Stack trace: #0 {main} thrown in - on line 4
Değerlendirilen kod savları ile, assert() geri çağırımları savın nerede yapıldığına dair bilgilerin yanı sıra sav için kullanılan kod da geri çağırıma iletildiğinden özellikle yararlı olabilir.
Örnek 3 - Başarısız bir savın özel bir işleyici ile işlenmesi
<?php
// savı etkin ve sessiz yap
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// İşleyici işlev
function my_assert_handler($file, $line, $code)
{
echo "<hr>Assertion Failed:
File '$file'<br />
Line '$line'<br />
Code '$code'<br /><hr />";
}
// geri çağırım işlevi
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Başarısız olması gereken savı öne sür
$array = [];
assert('count($array);');
?>
Yukarıdaki örneğin PHP 7.2 çıktısı::
Deprecated: assert(): Calling assert() with a string argument is deprecated in test.php on line 21 <hr>Assertion Failed: File 'test.php'<br /> Line '21'<br /> Code 'count($array);'<br /><hr />
Yukarıdaki örneğin PHP 7.1 çıktısı:
<hr>Assertion Failed: File 'test.php'<br /> Line '21'<br /> Code 'count($array);'<br /><hr />
Örnek 4 - Açıklama basmak için özel işleyici kullanımı
<?php
// savı etkin ve sessiz yap
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// İşleyici işlev
function my_assert_handler($file, $line, $code, $desc = null)
{
echo "sav başarısız - $file:$line: $code";
if ($desc) {
echo ": $desc";
}
echo "\n";
}
// Geri çağırım işlevi
assert_options(ASSERT_CALLBACK, 'my_assert_handler');
// Başarısız olması gereken savı öne sür
assert('2 < 1');
assert('2 < 1', 'İki birden küçüktür');
?>
Yukarıdaki örneğin PHP 7.2 çıktısı::
Deprecated: assert(): Calling assert() with a string argument is deprecated in test.php on line 21 Assertion failed at test.php:21: 2 < 1 Deprecated: assert(): Calling assert() with a string argument is deprecated in test.php on line 22 Assertion failed at test.php:22: 2 < 1: İki birden küçüktür
Yukarıdaki örneğin PHP 7.1 çıktısı:
Assertion failed at test.php:21: 2 < 1 Assertion failed at test.php:22: 2 < 1: İki birden küçüktür