Heim  >  Artikel  >  php教程  >  Detaillierte Erklärung der PHP-Magic-Variablen und Magic-Funktionen

Detaillierte Erklärung der PHP-Magic-Variablen und Magic-Funktionen

黄舟
黄舟Original
2016-12-13 18:03:451078Durchsuche

Magische Variablen

PHP stellt jedem ausgeführten Skript eine große Anzahl vordefinierter Konstanten zur Verfügung.

Viele Konstanten werden jedoch von verschiedenen Erweiterungsbibliotheken definiert und erscheinen nur, wenn diese Erweiterungsbibliotheken geladen werden, oder nach dem dynamischen Laden oder wenn sie während der Kompilierung eingebunden wurden.

Es gibt acht magische Konstanten, deren Werte sich je nach Position im Code ändern.

Der Wert von __LINE__ hängt beispielsweise von der Zeile im Skript ab. Diese speziellen Konstanten unterscheiden nicht zwischen Groß- und Kleinschreibung und lauten wie folgt:

__LINE__

Die aktuelle Zeilennummer in der Datei.

Beispiel:

<?php
echo &#39;这是第 “ &#39;  . __LINE__ . &#39; ” 行&#39;;
?>

Das Ausgabeergebnis des obigen Beispiels ist:

这是第 “ 2 ” 行

__FILE__

Der vollständige Pfad und Dateiname von Datei. Bei Verwendung innerhalb einer eingebundenen Datei wird der Name der eingebundenen Datei zurückgegeben.

Seit PHP 4.0.2 enthält __FILE__ immer einen absoluten Pfad (oder den aufgelösten absoluten Pfad im Fall eines symbolischen Links), während Versionen davor manchmal einen relativen Pfad enthielten.

Beispiel:

?php
echo &#39;该文件位于 “ &#39;  . __FILE__ . &#39; ” &#39;;
?>

Das Ausgabeergebnis des obigen Beispiels ist:

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

Das Verzeichnis, in dem sich die Datei befindet. Bei Verwendung innerhalb einer eingebundenen Datei wird das Verzeichnis zurückgegeben, in dem sich die eingebundene Datei befindet.

Es entspricht dirname(__FILE__). Verzeichnisnamen enthalten keinen abschließenden Schrägstrich, es sei denn, es handelt sich um das Stammverzeichnis. (Neu in PHP 5.3.0)

Beispiel:

<?php
echo &#39;该文件位于 “ &#39;  . __DIR__ . &#39; ” &#39;;
?>

Das Ausgabeergebnis des obigen Beispiels ist:

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

Funktionsname (Neu in PHP 4.3.0). Seit PHP 5 gibt diese Konstante den Namen der Funktion zurück, wie er definiert wurde (Groß-/Kleinschreibung beachten). In PHP 4 ist dieser Wert immer kleingeschrieben.

Beispiel:

?php
function test() {
 echo  &#39;函数名为:&#39; . __FUNCTION__ ;
}
test();
?>

Das Ausgabeergebnis des obigen Beispiels ist:

函数名为:test

__CLASS__

Der Name der Klasse (neu hinzugefügt). in PHP 4.3.0). Seit PHP 5 gibt diese Konstante den Namen der Klasse zurück, als sie definiert wurde (Groß-/Kleinschreibung beachten).

In PHP 4 ist dieser Wert immer kleingeschrieben. Der Klassenname enthält den Bereich, in dem er deklariert ist (z. B. FooBar). Beachten Sie, dass __CLASS__ seit PHP 5.4 auch für Merkmale funktioniert. Bei Verwendung innerhalb einer Trait-Methode ist __CLASS__ der Name der Klasse, die die Trait-Methode aufruft.

Instanz:

<?php
class test {
 function _print() {
  echo &#39;类名为:&#39;  . __CLASS__ . "<br>";
  echo  &#39;函数名为:&#39; . __FUNCTION__ ;
 }
}
$t = new test();
$t->_print();
?>

Das Ausgabeergebnis des obigen Beispiels ist:

Klassenname: test
Funktionsname: _print

__TRAIT__

Eigenschaftsname (neu in PHP 5.4.0). Seit PHP 5.4.0 implementiert PHP eine Methode zur Code-Wiederverwendung namens Traits.

Der Merkmalsname enthält den Bereich, in dem er deklariert ist (z. B. FooBar).

Von der Basisklasse geerbte Mitglieder werden von der MyHelloWorld-Methode im eingefügten SayWorld-Merkmal überschrieben. Sein Verhalten stimmt mit den in der MyHelloWorld-Klasse definierten Methoden überein. Die Rangfolge ist, dass Methoden in der aktuellen Klasse Merkmalsmethoden überschreiben, die wiederum Methoden in der Basisklasse überschreiben.

<?php
class Base {
    public function sayHello() {
        echo &#39;Hello &#39;;
    }
}
 {
    public function sayHello() {
        parent::sayHello();
        echo &#39;World!&#39;;
    }
}
class MyHelloWorld extends Base {
    
}
$o = new MyHelloWorld();
$o->sayHello();
?>

Die obige Routine gibt Folgendes aus:

Hello World!

METHOD__

Der Methodenname der Klasse (neu hinzugefügt in PHP 5.0.0). Gibt den Namen der Methode so zurück, wie er definiert wurde (Groß-/Kleinschreibung beachten).

Beispiel:

<?php
function test() {
 echo  &#39;函数名为:&#39; . __METHOD__ ;
}
test();
?>

Das Ausgabeergebnis des obigen Beispiels ist:

函数名为:test

__NAMESPACE__

Der Name des aktuellen Namespace (Groß-/Kleinschreibung). -empfindlich). Diese Konstante wird zur Kompilierungszeit definiert (neu in PHP 5.3.0).

Instanz:

<?php
namespace MyProject;
echo &#39;命名空间为:"&#39;, __NAMESPACE__, &#39;"&#39;; // 输出 "MyProject"
?>

Das Ausgabeergebnis des obigen Beispiels ist:

命名空间为:"MyProject"

Magische Funktion

__construct()
Wann Das Instanziieren eines Objekts wird aufgerufen.
Wenn __construct und eine Funktion mit dem Klassennamen und dem Funktionsnamen gleichzeitig existieren, wird __construct aufgerufen und die andere wird nicht aufgerufen.

__destruct()
Wird aufgerufen, wenn ein Objekt gelöscht wird oder die Objektoperation beendet wird.

__call()
Das Objekt ruft eine Methode auf
Wenn die Methode vorhanden ist, wird sie direkt aufgerufen.
Wenn sie nicht vorhanden ist, wird die Funktion __call aufgerufen.

__get()
Beim Lesen der Attribute eines Objekts,
Wenn das Attribut vorhanden ist, wird der Attributwert direkt zurückgegeben.
Wenn er nicht vorhanden ist, wird die __get-Funktion zurückgegeben angerufen.

__set()
Beim Festlegen der Attribute eines Objekts
Wenn das Attribut vorhanden ist, wird der Wert direkt zugewiesen.
Wenn es nicht vorhanden ist, wird die Funktion __set aufgerufen .

__toString()
wird beim Drucken eines Objekts aufgerufen. Beispielsweise wird echo $obj; oder print $obj;

__clone()
beim Klonen eines Objekts aufgerufen. Zum Beispiel: $t=new Test();$t1=clone $t;

__sleep()
serialize wird vorher aufgerufen. Wenn das Objekt relativ groß ist und Sie vor der Serialisierung einige Dinge löschen möchten, können Sie diese Funktion in Betracht ziehen.

__wakeup()
wird beim Deserialisieren aufgerufen, um einige Objektinitialisierungsarbeiten durchzuführen.

__isset()
Wird aufgerufen, wenn überprüft wird, ob die Attribute eines Objekts vorhanden sind. Beispiel: isset($c->name).

__unset()
Wird aufgerufen, wenn die Eigenschaften eines Objekts aufgehoben werden. Beispiel: unset($c->name).

__set_state()
wird aufgerufen, wenn var_export aufgerufen wird. Verwenden Sie den Rückgabewert von __set_state als Rückgabewert von var_export.

__autoload()
Wenn beim Instanziieren eines Objekts die entsprechende Klasse nicht vorhanden ist, wird diese Methode aufgerufen.

Das Obige ist der gesamte Inhalt dieses Artikels. Habt ihr ein neues Verständnis für magische Variablen und magische Funktionen gewonnen? Ich hoffe, dass euch der Inhalt dieses Artikels gefällt. www.php.cn) !


Stellungnahme:
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