Heim > Artikel > Backend-Entwicklung > Eine kurze Diskussion über die Verwendung von Assertionsfunktionen in PHP
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.
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(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:
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.
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_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测试代码: 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.phpEmpfohlenes Lernen: „
“
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!