Heim Backend-Entwicklung PHP-Tutorial Entdecken Sie die Funktionen is_callable() und method_exists() in PHP

Entdecken Sie die Funktionen is_callable() und method_exists() in PHP

Sep 06, 2017 pm 04:24 PM
callable exists method

In vielen Produktanwendungen können wir häufig die folgende Verwendung sehen, mit der überprüft wird, ob eine Methode in einem Objekt vorhanden ist.

<?php
    if (method_exists($object, &#39;SomeMethod&#39;)) {   
    $object->SomeMethod($this, TRUE); 
    }
?>
Nach dem Login kopieren

Der Zweck dieses Codes ist relativ einfach zu verstehen. Es gibt ein Objekt namens $object. Wir möchten wissen, ob es eine Methode namens SomeMethod hat.

Dieser Code sieht korrekt aus und wird die meiste Zeit einwandfrei funktionieren. Aber wenn die Methode dieses $object-Objekts für die aktuelle Ausführungsumgebung unsichtbar ist, kann das Programm dann trotzdem normal ausgeführt werden? So wie diese Funktionsnamensmethode existiert, prüft sie lediglich, ob die von uns bereitgestellte Klasse oder das Objekt über die von uns erwartete Methode verfügt. Wenn nicht, wird das Problem der Sichtbarkeit hier nicht berücksichtigt. Wenn Sie also zufällig eine private oder geschützte Methode bestimmen, erhalten Sie möglicherweise eine korrekte Rückgabe, bei der Ausführung erhalten Sie jedoch eine Fehlermeldung „Schwerwiegender Fehler“.

Die eigentliche Absicht des obigen Codes sollte wie folgt verstanden werden: Können wir für die bereitgestellte Klasse oder das bereitgestellte Objekt die SomeMethod-Methode im aktuellen Bereich aufrufen? Und genau das ist der Zweck der is_callable()-Funktion. is_callable()Die Funktion erhält einen Callback-Parameter, der einen Funktionsnamen oder ein Array mit dem Methodennamen und dem Objekt angeben kann. Wenn sie im aktuellen Bereich ausgeführt werden kann, gibt sie TRUE zurück.

<?php
    if (is_callable(array($object, &#39;SomeMethod&#39;))) {      
        $object->SomeMethod($this, TRUE); 
    }
?>
Nach dem Login kopieren

Lassen Sie uns ein Beispiel geben, um den Unterschied zwischen den beiden zu veranschaulichen.

<?phpclass Foo {
    public function PublicMethod(){}    
    private function PrivateMethod(){}    
    public static function PublicStaticMethod(){}    
    private static function PrivateStaticMethod(){}
}
    $foo = new Foo();$callbacks = array(    
    array($foo, &#39;PublicMethod&#39;),    
    array($foo, &#39;PrivateMethod&#39;),    
    array($foo, &#39;PublicStaticMethod&#39;),    
    array($foo, &#39;PrivateStaticMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PublicMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PrivateMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PublicStaticMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PrivateStaticMethod&#39;),
   );
   foreach ($callbacks as $callback){
    var_dump($callback);
    var_dump(method_exists($callback[0], $callback[1]));
    var_dump(is_callable($callback));    
    echo str_repeat(&#39;-&#39;, 10);    
    echo &#39;<br />&#39;;
}
Nach dem Login kopieren

Nachdem wir das obige Skript ausgeführt haben, werden wir den Unterschied zwischen den beiden Funktionen deutlich erkennen.

is_callable() Es gibt andere Verwendungsmöglichkeiten, zum Beispiel nicht die bereitgestellte Klasse oder Methode zu überprüfen, sondern nur zu überprüfen, ob die Syntax der Funktion oder Methode korrekt ist. Wie method_exists() kann is_callable() das automatische Laden von Klassen auslösen.

Wenn ein Objekt eine magische Methode __call hat, gibt method_exists() FALSE und is_callable() TRUE zurück, wenn die Methode beurteilt wird.

<?phpclass MethodTest {
    public function __call($name, $arguments){
      echo &#39;Calling object method &#39; . $name . &#39; &#39; .implode(&#39;, &#39;, $arguments);      
      echo &#39;<br />&#39;;
    }
}$obj = new MethodTest();$obj->runtest(&#39;in object context&#39;);
var_dump(method_exists($obj,&#39;runtest&#39;));
var_dump(is_callable(array($obj,&#39;runtest&#39;)));

echo &#39;<br />&#39;;
Nach dem Login kopieren

Ergebnisse ausführen

Objektmethoden-Runtest im Objektkontext aufrufen
bool(false) bool(true)

Entdecken Sie die Funktionen is_callable() und method_exists() in PHP

In vielen Produktanwendungen sehen wir häufig die folgende Verwendung, mit der überprüft wird, ob eine Methode in einem Objekt vorhanden ist.

<?phpif (method_exists($object, &#39;SomeMethod&#39;)) {   
    $object->SomeMethod($this, TRUE); 
}?>
Nach dem Login kopieren

Der Zweck dieses Codes ist relativ einfach zu verstehen. Es gibt ein Objekt namens $object. Wir möchten wissen, ob es eine Methode namens SomeMethod hat.

Dieser Code sieht korrekt aus und wird die meiste Zeit einwandfrei funktionieren. Aber wenn die Methode dieses $object-Objekts für die aktuelle Ausführungsumgebung unsichtbar ist, kann das Programm dann trotzdem normal ausgeführt werden? So wie diese Funktionsnamensmethode existiert, prüft sie lediglich, ob die von uns bereitgestellte Klasse oder das Objekt über die von uns erwartete Methode verfügt. Wenn nicht, wird das Problem der Sichtbarkeit hier nicht berücksichtigt. Wenn Sie also zufällig eine private oder geschützte Methode bestimmen, erhalten Sie möglicherweise eine korrekte Rückgabe, bei der Ausführung erhalten Sie jedoch eine Fehlermeldung „Schwerwiegender Fehler“.

Die eigentliche Absicht des obigen Codes sollte wie folgt verstanden werden: Können wir für die bereitgestellte Klasse oder das bereitgestellte Objekt die SomeMethod-Methode im aktuellen Bereich aufrufen? Und genau das ist der Zweck der is_callable()-Funktion. is_callable()Die Funktion erhält einen Callback-Parameter, der einen Funktionsnamen oder ein Array mit dem Methodennamen und dem Objekt angeben kann. Wenn sie im aktuellen Bereich ausgeführt werden kann, gibt sie TRUE zurück.

<?php
    if (is_callable(array($object, &#39;SomeMethod&#39;))) {      
    $object->SomeMethod($this, TRUE); 
    }
?>
Nach dem Login kopieren

Lassen Sie uns ein Beispiel geben, um den Unterschied zwischen den beiden zu veranschaulichen.

<?php
    class Foo {
    public function PublicMethod(){}    
    private function PrivateMethod(){}    
    public static function PublicStaticMethod(){}    
    private static function PrivateStaticMethod(){}
}
$foo = new Foo();$callbacks = array(    
    array($foo, &#39;PublicMethod&#39;),    
    array($foo, &#39;PrivateMethod&#39;),    
    array($foo, &#39;PublicStaticMethod&#39;),    
    array($foo, &#39;PrivateStaticMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PublicMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PrivateMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PublicStaticMethod&#39;),    
    array(&#39;Foo&#39;, &#39;PrivateStaticMethod&#39;),
   );
   foreach ($callbacks as $callback){
    var_dump($callback);
    var_dump(method_exists($callback[0], $callback[1]));
    var_dump(is_callable($callback));    
    echo str_repeat(&#39;-&#39;, 10);    
    echo &#39;<br />&#39;;
}
Nach dem Login kopieren

Nachdem wir das obige Skript ausgeführt haben, werden wir den Unterschied zwischen den beiden Funktionen deutlich erkennen.

is_callable() Es gibt andere Verwendungsmöglichkeiten, zum Beispiel nicht die bereitgestellte Klasse oder Methode zu überprüfen, sondern nur zu überprüfen, ob die Syntax der Funktion oder Methode korrekt ist. Wie method_exists() kann is_callable() das automatische Laden von Klassen auslösen.

Wenn ein Objekt eine magische Methode __call hat, gibt method_exists() FALSE und is_callable() TRUE zurück, wenn die Methode beurteilt wird.

<?phpclass MethodTest {
    public function __call($name, $arguments){
      echo &#39;Calling object method &#39; . $name . &#39; &#39; .implode(&#39;, &#39;, $arguments);      
      echo &#39;<br />&#39;;
    }
}
$obj = new MethodTest();$obj->runtest(&#39;in object context&#39;);
var_dump(method_exists($obj,&#39;runtest&#39;));
var_dump(is_callable(array($obj,&#39;runtest&#39;)));
echo &#39;<br />&#39;;
Nach dem Login kopieren

Ergebnisse ausführen

Objektmethoden-Runtest im Objektkontext aufrufen
bool(false) bool(true)

Entdecken Sie die Funktionen is_callable() und method_exists() in PHP

Das obige ist der detaillierte Inhalt vonEntdecken Sie die Funktionen is_callable() und method_exists() in PHP. 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

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Lösung für PHP Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion fetch() Lösung für PHP Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion fetch() Jun 23, 2023 am 09:36 AM

Wenn Sie PHP für die Entwicklung von Webanwendungen verwenden, müssen Sie häufig eine Datenbank verwenden. Bei der Verwendung einer Datenbank kommt es sehr häufig zu Fehlermeldungen. Unter diesen ist PHPFatalerror: Calltoamemberfunctionfetch() ein relativ häufiger Fehler, der auftritt, wenn PDO zum Abfragen der Datenbank verwendet wird. Was verursacht diesen Fehler und wie kann er behoben werden? In diesem Artikel wird es Ihnen ausführlich erklärt. 1. Fehlerursache

Die Prinzipien und Nutzungsszenarien von Synchronized in Java sowie die Nutzungs- und Differenzanalyse der Callable-Schnittstelle Die Prinzipien und Nutzungsszenarien von Synchronized in Java sowie die Nutzungs- und Differenzanalyse der Callable-Schnittstelle Apr 21, 2023 am 08:04 AM

1. Grundfunktionen 1. Es beginnt mit einer optimistischen Sperre und wird bei häufigen Sperrkonflikten in eine pessimistische Sperre umgewandelt wird in eine Schwergewichtssperre umgewandelt. 3. Die Spin-Lock-Strategie, die am wahrscheinlichsten bei der Implementierung von Leichtgewichtssperren verwendet wird. 4. Es handelt sich um eine unfaire Sperre. 5. Es handelt sich um eine Wiedereintrittssperre. 6. Es handelt sich nicht um eine Lese-/Schreibsperre. 2. Die JVM Synchronisiert den Sperrvorgang. Sperren werden in die Zustände „keine Sperre“, „voreingenommene Sperre“, „leichte Sperre“ und „schwere Sperre“ unterteilt. Es wird je nach Situation nacheinander aktualisiert. Bei der voreingenommenen Sperre wird davon ausgegangen, dass der männliche Protagonist eine Sperre und die weibliche Protagonistin ein Thread ist. Wenn nur dieser Thread diese Sperre verwendet, können der männliche Protagonist und die weibliche Protagonistin für immer glücklich leben, auch wenn sie keine Heiratsurkunde erhalten (um hohe Werte zu vermeiden). -Kostenoperationen). Aber die weibliche Nebenrolle erscheint

So verwenden Sie die File.Exists-Funktion in C#, um festzustellen, ob eine Datei vorhanden ist So verwenden Sie die File.Exists-Funktion in C#, um festzustellen, ob eine Datei vorhanden ist Nov 18, 2023 am 11:25 AM

So verwenden Sie die Funktion „File.Exists“ in C#, um festzustellen, ob eine Datei vorhanden ist. Bei C#-Dateioperationen ist die Feststellung, ob eine Datei vorhanden ist, eine grundlegende Funktionsanforderung. Die File.Exists-Funktion ist eine Methode in C#, mit der ermittelt wird, ob eine Datei vorhanden ist. In diesem Artikel wird erläutert, wie Sie die Funktion „File.Exists“ in C# verwenden, um festzustellen, ob eine Datei vorhanden ist, und es werden spezifische Codebeispiele bereitgestellt. Referenzieren Sie den Namespace. Bevor Sie mit dem Schreiben von Code beginnen, müssen Sie zunächst auf den System.IO-Namespace verweisen

So verwenden Sie die POST-Anfragemethode in jQuery So verwenden Sie die POST-Anfragemethode in jQuery Feb 28, 2024 pm 09:03 PM

So verwenden Sie die POST-Anforderungsmethode in jQuery. Bei der Webentwicklung ist häufig die Dateninteraktion zwischen der Front-End-Seite und dem Back-End-Server beteiligt. Unter diesen ist die POST-Anfrage eine häufig verwendete Methode. Über die POST-Anfrage können Sie Daten an den Backend-Server senden und das entsprechende Rückgabeergebnis erhalten. jQuery ist eine beliebte JavaScript-Bibliothek, die eine bequeme Möglichkeit bietet, AJAX-Anfragen zu stellen. In diesem Artikel wird die Verwendung der POST-Methode in jQuery für die Datenübertragung vorgestellt und spezifische Anweisungen bereitgestellt.

PHP-Fehler: Null als aufrufbare Lösung verwenden! PHP-Fehler: Null als aufrufbare Lösung verwenden! Aug 19, 2023 pm 05:01 PM

PHP-Fehler: Null als aufrufbare Lösung verwenden! Während des PHP-Entwicklungsprozesses stoßen wir häufig auf Fehlermeldungen. Einer der häufigsten Fehler ist „Null als Callable verwenden“. Diese Fehlermeldung weist darauf hin, dass der Parameter beim Aufruf eines aufrufbaren Objekts einen Nullwert übergeben hat, was dazu führt, dass der entsprechende Vorgang nicht ausgeführt werden kann. Dieser Fehler tritt normalerweise auf, wenn eine Rückruffunktion, -methode oder -instanz einer Klasse aufgerufen wird und wir das aufrufbare Objekt korrekt als Parameter übergeben müssen. Hier sind einige gängige Codebeispiele:

So implementieren Sie die Callable-Schnittstelle, um eine Thread-Klasse in Java zu erstellen So implementieren Sie die Callable-Schnittstelle, um eine Thread-Klasse in Java zu erstellen May 11, 2023 am 11:58 AM

Durch die Implementierung der Callable-Schnittstelle zum Erstellen einer Thread-Klasse wird seit Java 5 die Callable-Schnittstelle bereitgestellt. Diese Schnittstelle ist eine erweiterte Version der Runnable-Schnittstelle. Die Callable-Schnittstelle stellt eine call()-Methode als Thread-Ausführungskörper bereit Mit der call()-Methode können Ausnahmen deklariert werden. booleancancel(booleanmay) versucht, die mit der Zukunft verknüpfte Callable-Aufgabe abzubrechen. Vget() gibt den Rückgabewert der call()-Methode in der Call-Aufgabe zurück. Der Aufruf dieser Methode führt zum Blockieren des Threads und Sie müssen warten, bis der untergeordnete Thread beendet ist, bevor Sie den Rückgabewert erhalten. Vget(longtimeout,Ti

So verwenden Sie die Callable-Schnittstelle von Java So verwenden Sie die Callable-Schnittstelle von Java Apr 19, 2023 am 09:58 AM

Hinweis 1: Die Callable-Schnittstelle kann Ergebnisse zurückgeben oder Ausnahmeaufgaben auslösen, und der Implementierer kann eine Parameterlose Aufrufmethode definieren. 2. Anders als die Ausführungsmethode von Thread und Runnable ist die Ausführungsmethode von Callable Tasks call. call() kann einen Wert zurückgeben, die run()-Methode jedoch nicht. call() kann geprüfte Ausnahmen wie ClassNotFoundException auslösen, run() kann jedoch keine geprüften Ausnahmen auslösen. InstanzklasseMyCallableimplementsCallable{MyCallable(){}@OverridepublicInteger

Verwendung der EXISTS-Funktion in MYSQL Verwendung der EXISTS-Funktion in MYSQL Feb 24, 2024 pm 05:15 PM

Verwendung von EXISTS in MYSQL, mit Codebeispielen In der MYSQL-Datenbank ist EXISTS ein sehr nützlicher Operator, der verwendet wird, um zu bestimmen, ob eine Unterabfrage mindestens eine Datenzeile zurückgibt. Es wird normalerweise mit einer WHERE-Klausel verwendet, um Daten herauszufiltern, die Bedingungen basierend auf den Ergebnissen einer Unterabfrage erfüllen. Bei der Verwendung von EXISTS müssen Sie die folgenden Punkte beachten: Die EXISTS-Bedingung kümmert sich nicht um die spezifischen Daten, die von der Unterabfrage zurückgegeben werden, sondern nur darum, ob Daten zurückgegeben werden. Die EXISTS-Bedingung kann in Kombination mit anderen Bedingungen verwendet werden.

See all articles