Detaillierte Einführung und Beispiele für PHP-Magiekonstanten, Zauberfunktionen und vordefinierte Konstanten

王林
Freigeben: 2023-04-07 10:52:01
nach vorne
2245 Leute haben es durchsucht

一、魔术常量

1、__construct()

实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。 

2、__destruct()

当删除一个对象或对象操作终止时被调用

3、__call()

对象调用某个方法, 若方法存在,则直接调用;若不存在,则会去调用__call函数

4、__get()

读取一个对象的属性时,若属性存在,则直接返回属性值; 若不存在,则会调用__get函数。 

5、__set() 
设置一个对象的属性时, 若属性存在,则直接赋值; 若不存在,则会调用__set函数。

6、__toString() 
打印一个对象的时候被调用。如echo $obj;或print $obj; 

7、__clone() 
克隆对象时被调用。如:$t=new Test();$t1=clone $t; 

8、__sleep() 
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。 

9、__wakeup() 
unserialize时被调用,做些对象的初始化工作。

 10、__isset() 
检测一个对象的属性是否存在时被调用。如:isset($c->name)。 

11、__unset() 
unset一个对象的属性时被调用。如:unset($c->name)。 

12、__set_state() 
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。 

13、__autoload() 
实例化一个对象时,如果对应的类不存在,则该方法被调用。

举例说明:

1、__get() 当试图读取一个并不存在的属性的时候被调用。

如果试图读取一个对象并不存在的属性的时候,PHP就会给出错误信息。如果在类里添加__get方法,并且我们可以用这个函数实现类似java中反射的各种操作。

class Test 
{ 
     public function __get($key) 
    { 
         echo $key . " 不存在"; 
    } 
} 

$t = new Test(); 
echo $t->name; 
输出:name不存在
Nach dem Login kopieren

2、__set() 当试图向一个并不存在的属性写入值的时候被调用。

class Test 
{ 
    public function __set($key, $value) 
    { 
         echo '对' . $key . "附值" . $value; 
    } 
} 

$t = new Test(); 
$t->name = "aninggo"; 
输出:对name赋值aninggo
Nach dem Login kopieren

3、__call() 当试图调用一个对象并不存在的方法时,调用该方法。

class Test 
{ 
    public function __call($Key, $Args) 
    { 
         echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); 
    } 
} 

$t = new Test(); 
$t->getName(aning, go);

程序将会输出:
您要调用的 getName 方法不存在。参数是:Array
(
     [0] => aning
     [1] => go
)
Nach dem Login kopieren

4、__toString() 当打印一个对象的时候被调用,这个方法类似于java的toString方法,当我们直接打印对象的时候回调用这个函数。

class Test 
{ 
     public function __toString() 
     { 
         return "打印 Test"; 
     } 
} 

$t = new Test(); 
echo $t;
Nach dem Login kopieren

运行echo $t;的时候,就会调用$t->__toString();从而程序将会输出:打印 Test;

5、__clone() 当对象被克隆时,被调用。

class Test 
{ 
     public function __clone() 
     { 
         echo "我被复制了!"; 
     }
}

$t = new Test(); 
$t1 = clone $t;

程序输出:我被复制了!
Nach dem Login kopieren

二、魔术常量

1、__LINE__ 
返回文件中的当前行号。
2、__FILE__ 
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

3、__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
4、__FUNCTION__
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
5、__CLASS__
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。

6、__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
7、__METHOD__
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 格式:类名::方法名

8、__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

三、预定义常量

PHP_VERSION   Die Version des PHP-Programms, z. B. 4.0.2
PHP_OS  Der Name des Betriebssystems, das den PHP-Interpreter ausführt, z. B. Windows
PHP_SAPI  Wird verwendet, um festzustellen, ob dies der Fall ist wird über die Befehlszeile oder den Browser ausgeführt, wenn PHP_SAPI=='cli' bedeutet, dass es über die Befehlszeile ausgeführt wird. Mögliche Probleme mit der Grammatik analysieren
E_ERROR  Ungewöhnlich, aber nicht unbedingt der falsche Ort
E_WARNING Systemwechselsymbole, Windows ist (RN), Linux ist (/n), Mac ist (R), ab PHP 4.3.10 und PHP 5.0 Verfügbar ab vor 2 Jahren
E_PARSE Systemverzeichnistrennzeichen, Windows ist Backslash (), Linux ist ein Schrägstrich (/)
E_NOTICE  Trennzeichen für mehrere Pfade, Windows ist ein Backslash (;), Linux ist ein Schrägstrich (:)
PHP_EOL  INT-Maximalwert, 32-Bit-Plattform, das Wert ist 2147483647, verfügbar seit PHP 4.4.0 und PHP 5.0.5
DIRECTORY_SEPARATOR INT Wortlänge, 32-Bit-Plattform Der Wert ist 4 (4 Bytes), verfügbar seit PHP 4.4.0 und PHP 5.0.5
PATH_SEPARATOR4. PHP-Laufumgebungserkennungsfunktion
PHP_INT_MAX 
Diese Funktion gibt eine Beschreibung der PHP-Kleinbuchstabenzeichenfolge zur Schnittstelle mit dem WEB-Server zurück. PHP_INT_SIZEGibt eine Zeichenfolge in Kleinbuchstaben zurück, die den Typ der von PHP verwendeten Schnittstelle beschreibt (die Server-API, SAPI).

Zum Beispiel lautet diese Zeichenfolge unter CLI in PHP „cli“, und in Apache kann es je nach verwendeter spezifischer SAPI mehrere unterschiedliche Werte geben.

Mögliche Werte sind unten aufgeführt: php_sapi_name()aolserver, apache, apache2filter, apache2handler, caudium, cgi (bis PHP 5.3), cgi-fcgi, cli, Continuity, embed, isapi, litespeed, milter, nsapi, phttpd , pi3web, roxen, thttpd, tux und webjames.

SAPI: Serverseitige API, scheint dasselbe zu sein wie CGI. Die von jedem Server bereitgestellte API kann unterschiedlich sein, aber alle bieten CGI.

Es ist also verständlich, dass CGI eine SAPI ist, die jeder Server haben sollte. Apache verfügt über eine eigene SAPI und IIS verfügt ebenfalls über eine eigene. PHP kann jedoch auf diesen verschiedenen Servern funktionieren, da PHP deren jeweilige SAPIs unterstützt.
PHP-CLI: PHP-Befehlszeilenschnittstelle, PHP kann in diesem Modus oder im CGI-Modus arbeiten. Es handelt sich um eine Art SAPI, das ähnliche Funktionen wie CGI hat.

Wenn Sie weitere verwandte Inhalte erfahren oder diese Funktionen und Konstanten besser beherrschen möchten, besuchen Sie bitte die chinesische PHP-Website:
PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung und Beispiele für PHP-Magiekonstanten, Zauberfunktionen und vordefinierte Konstanten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage