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.
|
PHP 8.3.0 ve sonrasında kullanımı önerilmiyor.
|
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 öncesinde, işlevin sözdizimi şöyle olmalıydı:
PHP 8.3.0 ve sonrasında kullanımı önerilmiyor.
|
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)
|
PHP 8.3.0 ve sonrasında kullanımı önerilmiyor.
|
assert.bail |
false |
true ise, beklenti karşılanmazsa PHP betiğinin yürütülmesini iptal eder.
|
PHP 8.3.0 ve sonrasında kullanımı önerilmiyor.
|
assert.warning |
true |
true ise, beklenti karşılanmazsa bir E_WARNING
çıktılanır. Bu INI ayarı, assert.exception
etkinleştirilmişse etkisizdir.
|
|
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
Aşağıdakilerin en az biri doğruysa ise true
döner.
zend.assertions=0
zend.assertions=-1
assert.exception=1
assert.bail=1
açıklama
da özel bir istisna nesnesi
belirtilmiş.
Koşulların hiçbiri doğru değilse ancak sav
doğru ise
assert() true
yoksa false
ile döner.
Örnekler
Örnek 1 - assert() örneği
<?php
assert(1 > 2);
echo 'Hi!';
?>
Savlar etkin olduğunda
(zend.assertions=1
yukarıdaki örneğin çıktısı:
Fatal error: Uncaught AssertionError: assert(1 > 2) in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'assert(1 > 2)')
#1 {main}
thrown in example.php on line 2
Savlar etkin olmadığında (zend.assertions=0
veya
zend.assertions=-1
) yukarıdaki örneğin çıktısı:
Örnek 2 - Özel ileti kullanımı
<?php
assert(1 > 2, "Birin ikiden büyük olması bekleniyor");
echo 'Hi!';
?>
Savlar etkinken yukarıdaki örneğin çıktısı:
Fatal error: Uncaught AssertionError: Expected one to be greater than two in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'Expected one to...')
#1 {main}
thrown in example.php on line 2
Savlar etkin değilken yukarıdaki örneğin çıktısı:
Örnek 3 - Özel istisna sınıfı kullanımı
<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Expected one to be greater than two"));
echo 'Hi!';
Savlar etkinken yukarıdaki örneğin çıktısı:
Fatal error: Uncaught ArithmeticAssertionError: Expected one to be greater than two in example.php:4
Stack trace:
#0 {main}
thrown in example.php on line 4
Savlar etkin değilken yukarıdaki örneğin çıktısı: