Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Diskussion über die Verwendung von Assertionsfunktionen in PHP

Eine kurze Diskussion über die Verwendung von Assertionsfunktionen in PHP

青灯夜游
青灯夜游nach vorne
2021-06-22 18:43:492715Durchsuche

In diesem Artikel erfahren Sie, wie Sie Assertionsfunktionen in PHP verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Eine kurze Diskussion über die Verwendung von Assertionsfunktionen in PHP

Ich dachte ursprünglich, dass zusicherungsbezogene Funktionen von Unit-Test-Komponenten wie PHPUnit bereitgestellt werden. Nachdem ich das Handbuch gelesen hatte, entdeckte ich, dass die Assertionsfunktion „assertion()“ eine Funktion ist, die mit PHP selbst geliefert wird. Mit anderen Worten: Wenn wir einfache Tests im Code durchführen, müssen wir nicht die gesamte Komponententestkomponente vollständig einführen.

assert()-Assertionsfunktion

assert(1==1);

assert(1==2);
// assert.exception = 0 时,Warning: assert(): assert(1 == 2)
// assert.exception = 1 时,Fatal error: Uncaught AssertionError: 验证不通过

Offensichtlich kann der zweite Teil des Codes die Assertionsüberprüfung nicht bestehen. Zu diesem Zeitpunkt gibt PHP eine Warnung oder einen Ausnahmefehler zurück. Warum gibt es zwei mögliche Fehlerformen? Wenn wir „assertion.Exception“ in php.ini auf „off“ oder „0“ setzen, d. h. wenn wir die Funktion dieses Parameters deaktivieren, gibt das Programm immer noch eine Warnung in Form von PHP5 zurück, genau wie der Kommentar im obigen Code. Gleichzeitig können Ausnahmen nicht durch try...catch abgefangen werden. Dieser Parameter steuert tatsächlich, ob ein authentisches Ausnahmeobjekt ausgelöst wird. Wenn Sie diesen Parameter als Standard beibehalten, also auf „on“ oder „1“ setzen, wird direkt eine Ausnahme ausgelöst und das Programm beendet.

Wie aus dem obigen Code ersichtlich ist, ist der erste Parameter der Behauptung ein Ausdruck und erfordert einen Ausdruck, der ein Objekt vom Typ Bool zurückgibt. Was ist, wenn wir eine Zeichenfolge oder eine Zahl übergeben?

// 设置 assert.exception = 0 进行多条测试

assert(" ");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion " " failed

assert("1");
// Deprecated: assert(): Calling assert() with a string argument is deprecated

assert(0);
// Warning: assert(): assert(0) failed

assert(1);

assert("1==2");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion "1==2" failed

Natürlich unterliegt der Ausdruck des ersten Parameters einer Typumwandlung, aber der Zeichenfolgentyp weist eine veraltete Erinnerung auf, die darauf hinweist, dass der Ausdruckstyp des an die Funktion „asset()“ übergebenen Zeichenfolgentyps veraltet ist. Die aktuelle Testversion ist 7.3. In Zukunft können Fehler oder Ausnahmen, die den Vorgang abbrechen, direkt gemeldet werden. Das Hauptproblem besteht darin, dass, wenn die übergebene Zeichenfolge selbst auch ein Ausdruck ist, die Beurteilung auf dem Inhalt dieses Ausdrucks basiert, was wie beim letzten Codeabschnitt leicht zu Mehrdeutigkeiten führen kann. Natürlich wird die veraltete Verwendungsmethode immer noch nicht empfohlen. Hier handelt es sich lediglich um ein Verständnis.

Als nächstes werfen wir einen Blick auf die anderen Parameter der Funktion „asser()“. Der zweite Parameter ist von zwei Typen: entweder eine Zeichenfolge, die zum Definieren von Fehlerinformationen verwendet wird, oder eine Ausnahmeklasse, die zum Auslösen einer Ausnahme verwendet wird.

assert(1==1, "验证不通过");

assert(1==2, "验证不通过");
// Warning: assert(): 验证不通过 failed

Wenn eine Zeichenfolge direkt angegeben wird, wird der Inhalt der von uns definierten Fehlermeldung in der Warnmeldung angezeigt. Das ist sehr leicht zu verstehen.

// 注意 assert.exception 设置不同的区别

assert(1==1,  new Exception("验证不通过"));

assert(1==2,  new Exception("验证不通过"));
// assert.exception = 1 时,Fatal error: Uncaught Exception: 验证不通过
// assert.exception = 0 时,Warning: assert(): Exception: 验证不通过

Natürlich können wir auch eine Ausnahmeklasse angeben, damit die Behauptung eine Ausnahme auslöst. Standardmäßig wird durch das Auslösen dieser Ausnahme die Ausführung des Programms abgebrochen. Das ist ein normaler Ausnahmeprozess. Wir können try...catch verwenden, um Ausnahmen abzufangen.

try{
    assert(1==2,  new Exception("验证不通过"));
}catch(Exception $e){
    echo "验证失败!:", $e->getMessage(), PHP_EOL;
}
// 验证失败!:验证不通过

Es gibt einen weiteren Parameter, der die Gesamtoperation von Assertions beeinflusst, und das ist der Parameter zend.assertions in php.ini. Es enthält drei Werte:

  • 1, generiert und führt Code aus, wird im Allgemeinen in Testumgebungen verwendet
  • 0, generiert Code, wird ihn aber zur Laufzeit passieren
  • -1, generiert keinen Code, wird im Allgemeinen in formalen Umgebungen verwendet

Sie können diesen Parameter selbst konfigurieren und testen. Der Standardwert in php.ini ist 1, was bedeutet, dass die Funktion Assert() normal ausgeführt wird.

assert_options() und die entsprechende Parameterkonfiguration in php.ini

Die Assertionsfunktion in PHP stellt uns auch eine Assert_options()-Funktion zur Verfügung, mit der wir einige Parameter im Zusammenhang mit der Assertionskonfiguration bequem festlegen und abrufen können. Zu den Assertionsflags, die es setzen kann, gehören:

|. -:
  • assert.active | ASSERT_WARNING |. Assert.warning |. Generieren Sie eine PHP-Warnung für jede fehlgeschlagene Behauptung ASSERT_BAIL |. Assert.bail |. Ausführung bei Assertionsfehler abbrechen ASSERT_QUIET_EVAL |. Assert.quiet_eval |. Deaktivieren Sie error_reporting, wenn Assertionsausdrücke ausgewertet werden ASSERT_CALLBACK |. affirm.callback | (NULL) |. Rufen Sie die Callback-Funktion auf, wenn die Behauptung fehlschlägt. Die Bedeutung dieser Parameter ist sehr einfach zu verstehen. Sie können sie selbst testen. Werfen wir einen Blick auf die Funktion des letzten ASSERT_CALLBACK. Tatsächlich ist die Beschreibung auch sehr klar: Wenn die Behauptung fehlschlägt, wird die durch diese Option definierte Rückruffunktion eingegeben.
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 1);
assert_options(ASSERT_BAIL, 1);

assert_options(ASSERT_CALLBACK, function($params){
    echo "====faild====", PHP_EOL;
    var_dump($params);
    echo "====faild====", PHP_EOL;
});

assert(1!=1);
// ====faild====
// string(105) ".../source/一起学习PHP中断言函数的使用.php"
// ====faild====

Wenn die Behauptung fehlschlägt, geben wir die Rückruffunktion ein und die Rückruffunktion gibt einfach den Inhalt der an die Rückruffunktion übergebenen Parameter aus. Es ist ersichtlich, dass die in dieser Rückruffunktion übergebenen Dateiinformationen die Behauptung nicht übergeben können.

Zusammenfassung

Das Erlernen und Beherrschen der Verwendung und Konfiguration von Assertionsfunktionen kann den Grundstein für das Erlernen von PHPUnit-Unit-Tests in der Zukunft legen. Natürlich gibt es nicht viele Dinge mit dieser Fähigkeit, also denken Sie daran!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E4%B8%80%E8%B5%B7%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E6%96%AD%E8%A8%80%E5%87%BD%E6%95%B0%E7%9A%84%E4%BD%BF%E7%94%A8.php
Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Verwendung von Assertionsfunktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen