


PHP-Lernen: Vertiefendes Verständnis der Funktionen is_callable() und method_exists()
In diesem Artikel werden hauptsächlich die Funktionen is_callable() und method_exists() in PHP vorgestellt, die einen hohen Lernwert haben.
1. Funktionsanalyse
is_callable()
Definition:
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
is_callable — Überprüfen Sie, ob der Parameter eine legale aufrufbare Struktur ist
bool is_callable ( callable $name
[, bool $syntax_only
= false [, string &$callable_name
]] )
Überprüfen Sie, ob der Inhalt der Variablen als Funktion aufgerufen werden kann. Dadurch kann nach einer Variablen gesucht werden, die einen gültigen Funktionsnamen enthält, oder nach einem Array, das ein korrekt codiertes Objekt und einen Funktionsnamen enthält.
Parameter:
name
Die zu überprüfende Rückruffunktion.
syntax_only
Wenn diese Funktion auf TRUE
gesetzt ist, überprüft diese Funktion nur, ob name
eine Funktion oder Methode sein kann. Es lehnt einfach Nichtzeichen ab oder enthält keine gültige Struktur, die in der Rückruffunktion verwendet werden kann. Valid sollte zwei Elemente enthalten, das erste ist ein Objekt oder Zeichen und das zweite Element ist ein Zeichen.
callable_name
Akzeptiert „aufrufbaren Namen“. Das folgende Beispiel ist „someClass::someMethod“. Beachten Sie, dass someClass::SomeMethod() zwar eine aufrufbare statische Methode sein soll, dies im Beispiel jedoch nicht der Fall ist.
Rückgabewert:
Wenn name
aufrufbar ist, geben Sie TRUE
zurück , andernfalls geben Sie FALSE
zurück.
Referenz: http://php.net/manual/zh/function.is-callable.php
2. Funktionstest
Test 1:
echo '<pre >'; $func = function ($a) { echo $a; }; $re = is_callable($func, true, $callable_name1); echo '<hr />'; $re1 = is_callable($func, false, $callable_name2); //结果 bool(true) string(17) "Closure::__invoke" ------------------------------------- bool(true) string(17) "Closure::__invoke"
Testergebnisse:
Für anonyme Funktionen nach Übergabe der Funktionsvariablen Parameter zwei syntax_only true und false, die Druckergebnisse sind die gleichen.
Test 2:
function c_b($d) { echo $d; } $re = is_callable('c_b', false, $callable_name1); $re1 = is_callable('c_b', true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //结果 bool(true) ---------------- bool(true) ---------------- string(3) "c_b" ---------------- string(3) "c_b"
Testergebnis:
Für allgemeine Funktionen, Nach der Übergabe des Funktionsnamens und des zweiten Parameters syntax_only true und false sind die Druckergebnisse dieselben.
Test drei:
class Person { public static function get($a) { echo $a; } protected function _set() { echo 1; } } $p = new Person(); $re = is_callable([$p, 'get'], false, $callable_name1); $re1 = is_callable([$p, 'get'], true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //结果 bool(true) ----------------- bool(true) ----------------- string(11) "Person::get" --------------------------- string(11) "Person::get"
Testergebnis:
Für Klassenmethode, die Parameter liegen in einer Array-Struktur vor (Klassenobjekt oder Klassenname + Methodenname), Parameter zwei syntax_only true und false, das Druckergebnis ist das gleiche.
Test 4:
$a = 'i am string'; $re = is_callable($a, false, $callable_name1); $re1 = is_callable($a, true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //结果 bool(false) ---------------- bool(true) ---------------- string(11) "i am string" ------------------------- string(11) "i am string"
Testergebnis:
对于传入的验证name,如果syntax_only 设置为true,它验证传入name是否是字符串,是否含有非法字符,如果不含有,则返回true,它并不会验证name是否为合法调用结构。
测试五:
$re = is_callable(['Class', 'Method'], false, $callable_name1); $re1 = is_callable(['Class', 'Method'], true, $callable_name2); var_dump($re); echo '<hr />'; var_dump($re1); echo '<hr />'; var_dump($callable_name1); echo '<hr />'; var_dump($callable_name2); //结果 bool(false) -------------- bool(true) -------------- string(13) "Class::Method" ----------------------------- string(13) "Class::Method"
测试结果:
对于传入的验证name,如果syntax_only 设置为true,它只验证传入name是否是字符串,是否含有非法字符或是否为数组参数字符串1 + 字符串二,如果符合条件,则返回true,它并不会验证name是否为合法调用结构。否者返回false;
测试六:
class Person { public static function get($a) { echo $a; } protected function _set() { echo 1; } } $p = new Person(); $re = is_callable([$p, '_set'], false); var_dump($re); echo '<hr />'; $re1 = method_exists($p, '_set'); var_dump($re1); //结果 bool(false) ------------ bool(true)
测试结果:
对于函数is_callable() 来说,如果验证的类方法,访问修饰符为protected或private 则返回false。
对于method_exists() 来说,则不受访问修饰符的影响,只要类方法存在,则返回true。
三、总结、
1、is_callable() 函数,可传入的name类型有:函数字符串,匿名函数变量,类或类对象和方法名称组成的数组。其函数第二参数,如果是true,则只验证name是否是字符串或则是类或字符串1(类对象)和字符串二(方法名称)组成的数组。而不验证name是否为合法调用结构。如果是false,则验证name是否为合法调用结构。
2、method_exists() 函数,不受访问修饰符的影响,只要类方法存在,则返回true。函数is_callable()来说,如果验证的类方法,访问修饰符为protected或private 则返回false。
相关教程:PHP视频教程
Das obige ist der detaillierte Inhalt vonPHP-Lernen: Vertiefendes Verständnis der Funktionen is_callable() und method_exists(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Alipay PHP ...

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Wie debugge ich den CLI -Modus in PhpStorm? Bei der Entwicklung mit PHPSTORM müssen wir manchmal den PHP im CLI -Modus (COMS -Zeilenschnittstellen) debuggen ...

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.
