Heim Backend-Entwicklung PHP-Tutorial PHP-Lernen: Vertiefendes Verständnis der Funktionen is_callable() und method_exists()

PHP-Lernen: Vertiefendes Verständnis der Funktionen is_callable() und method_exists()

Apr 25, 2019 pm 05:10 PM

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 &#39;<pre >&#39;;
$func = function ($a)
{
    echo $a;
};
$re = is_callable($func, true, $callable_name1);
echo &#39;<hr />&#39;;
$re1 = is_callable($func, false, $callable_name2);

//结果
bool(true)
string(17) "Closure::__invoke"
-------------------------------------
bool(true)
string(17) "Closure::__invoke"
Nach dem Login kopieren

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(&#39;c_b&#39;, false, $callable_name1);
$re1 = is_callable(&#39;c_b&#39;, true, $callable_name2);
var_dump($re);
echo &#39;<hr />&#39;;
var_dump($re1);
echo &#39;<hr />&#39;;
var_dump($callable_name1);
echo &#39;<hr />&#39;;
var_dump($callable_name2);
//结果
bool(true)
----------------
bool(true)
----------------
string(3) "c_b"
----------------
string(3) "c_b"
Nach dem Login kopieren

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, &#39;get&#39;], false, $callable_name1);
$re1 = is_callable([$p, &#39;get&#39;], true, $callable_name2);
var_dump($re);
echo &#39;<hr />&#39;;
var_dump($re1);
echo &#39;<hr />&#39;;
var_dump($callable_name1);
echo &#39;<hr />&#39;;
var_dump($callable_name2);
//结果
bool(true)
-----------------
bool(true)
-----------------
string(11) "Person::get"
---------------------------
string(11) "Person::get"
Nach dem Login kopieren

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 = &#39;i am string&#39;;
$re = is_callable($a, false, $callable_name1);
$re1 = is_callable($a, true, $callable_name2);
var_dump($re);
echo &#39;<hr />&#39;;
var_dump($re1);
echo &#39;<hr />&#39;;
var_dump($callable_name1);
echo &#39;<hr />&#39;;
var_dump($callable_name2);
//结果
bool(false)
----------------
bool(true)
----------------
string(11) "i am string"
-------------------------
string(11) "i am string"
Nach dem Login kopieren

Testergebnis:

对于传入的验证name,如果syntax_only 设置为true,它验证传入name是否是字符串,是否含有非法字符,如果不含有,则返回true,它并不会验证name是否为合法调用结构。

测试五:

$re = is_callable([&#39;Class&#39;, &#39;Method&#39;], false, $callable_name1);
$re1 = is_callable([&#39;Class&#39;, &#39;Method&#39;], true, $callable_name2);
var_dump($re);
echo &#39;<hr />&#39;;
var_dump($re1);
echo &#39;<hr />&#39;;
var_dump($callable_name1);
echo &#39;<hr />&#39;;
var_dump($callable_name2);
//结果
bool(false)
--------------
bool(true)
--------------
string(13) "Class::Method"
-----------------------------
string(13) "Class::Method"
Nach dem Login kopieren

测试结果:

对于传入的验证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, &#39;_set&#39;], false);
var_dump($re);
echo &#39;<hr />&#39;;
$re1 = method_exists($p, &#39;_set&#39;);
var_dump($re1);
//结果
bool(false)
------------
bool(true)
Nach dem Login kopieren

测试结果:

对于函数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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Beschreiben Sie die soliden Prinzipien und wie sie sich für die PHP -Entwicklung anwenden. Apr 03, 2025 am 12:04 AM

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.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

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? Wie debugge ich den CLI -Modus in PhpStorm? Apr 01, 2025 pm 02:57 PM

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 ...

Erklären Sie das Konzept der späten statischen Bindung in PHP. Erklären Sie das Konzept der späten statischen Bindung in PHP. Mar 21, 2025 pm 01:33 PM

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

Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Wie sende ich eine Postanforderung mit JSON -Daten mithilfe der Curl -Bibliothek von PHP? Apr 01, 2025 pm 03:12 PM

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 � ...

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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.

See all articles