assert
(PHP 4, PHP 5, PHP 7, PHP 8)
assert — Savın doğruluğuna bakar
Açıklama
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:
Sav yapılandırma yönergeleri
İsim |
Öntanımlı |
Açıklama |
Sürüm Bilgisi |
zend.assertions |
1 |
-
1 : kodu üret ve çalıştır (geliştirme kipi)
-
0 : kodu üret ama çalışma anında etrafından dolaş
-
-1 : kod üretme (üretim kipi)
|
|
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 |
-
1 : Sav başarısız olursa istisnayı yavrula:
Ya istisna bağımsız değişkeni ile sağlanan nesneyi
ya da bir nesne sağlanmamışsa AssertionError
nesnesini.
-
0 : Yukarıda açıklandığı gibi bir
Throwable kullan veya oluştur, ancak o
nesneyi örnekllemek yerine nesneyi temel alan bir uyarı oluştur
(PHP 5 davranışıyla uyumlu)
|
|
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.
|
|
The options starting with
assert.
ile başlayan seçenekler
assert_options() ile yapıaldırılabilir. Ancak, bu önerilmez.
Bağımsız Değişkenler
-
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.
Uyarı
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.
Dönen Değerler
sav
başarısız olursa false
olmazsa true
döner.
Örnekler
- Beklentiler
Ö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ı:
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ı:
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ı (yalnızca, PHP 7)
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