assert

(PHP 4, PHP 5, PHP 7, PHP 8)

assertSavın doğruluğuna bakar

Açıklama

assert(mixed$sav, Throwable|string|null$açıklama = null): bool

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:

Sav yapılandırma yönergeleri
İsimÖntanımlıAçıklamaSürüm Bilgisi
zend.assertions1
  • 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.activetruefalse ise, assert() beklentiyle ilgilenmez ve koşulsuz olarak true döndürür.  
assert.callbacknull Sav başarısız olduğunda çağrılacak kullanıcı tanımlı işlev. Sözdizimi:
assert_callback(
    string$dosya,
    int$satır,
    null$sav,
    string$açıklama = ?
): void
PHP 8.0.0 öncesnde, işlevin sözdizimi şöyle olmalıydı:
assert_callback(
    string$dosya,
    int$satır,
    string$sav,
    string$açıklama = ?
): void
assert.exception0
  • 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.bailfalsetrue ise, beklenti karşılanmazsa PHP betiğinin yürütülmesini iptal eder.  
assert.warningtruetrue 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.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0açıklama bir Throwable örneği ise, yalnızca sav yürütülüp başarısız olduğunda yavrulanır.
8.0.0açıklama bir Throwable örneği ise, atanmış olsa bile geri çağırım işlevi çağrılmaz.
8.0.0assert() 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_evalphp.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.

Ö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ı:

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ı (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

Ayrıca Bakınız

To Top