Maison >développement back-end >tutoriel php >Introduction aux constantes magiques PHP et résumé des instructions du code d'utilisation des fonctions magiques

Introduction aux constantes magiques PHP et résumé des instructions du code d'utilisation des fonctions magiques

伊谢尔伦
伊谢尔伦original
2017-07-17 15:18:201400parcourir

Constante magique

1. LINE
Renvoie le numéro de ligne actuel dans le fichier.

2. FILE
Renvoie le chemin complet et le nom du fichier. S'il est utilisé dans un fichier d'inclusion, renvoie le nom du fichier d'inclusion. Depuis PHP 4.0.2, FILE contient toujours un chemin absolu, alors que les versions antérieures contenaient parfois un chemin relatif.

3. FUNCTION
Renvoie le nom de la fonction (nouveau en PHP 4.3.0). Depuis PHP 5, cette constante renvoie le nom de la fonction tel qu'il a été défini (sensible à la casse). En PHP 4, cette valeur est toujours en minuscule.

4. CLASS
Renvoie le nom de la classe (nouveau en PHP 4.3.0). Depuis PHP 5, cette constante renvoie le nom de la classe lors de sa définition (sensible à la casse). En PHP 4, cette valeur est toujours en minuscule.

5. METHOD
Renvoie le nom de la méthode de la classe (récemment ajouté dans PHP 5.0.0). Renvoie le nom de la méthode telle qu'elle a été définie (sensible à la casse).

Qu'est-ce qu'une fonction magique ?

Les fonctions au début sont appelées fonctions magiques. De telles fonctions sont déclenchées dans des conditions spécifiques. ) get(), etc.
sont déclenchés lors de la définition ou de l'obtention de propriétés inexistantes
Quelles sont les fonctions magiques
En général, il existe les fonctions magiques suivantes
construct() destruct(. ) get() set() isset() unset() call() callStatic()
sleep() wakeup() toString() set_state() clone( ) autoload()
construct() Lors de l'instanciation d'un objet, cette méthode de l'objet est d'abord appelée.
destruct() Cette méthode est appelée lors de la suppression d'un objet ou lorsque l'opération sur l'objet se termine.

class test1 { 
public function construct() { 
var_dump(function); 
} 
public function destruct() { 
var_dump(function); 
} 
} 
$t1 = new test1 ; 
unset($t1);

get est appelé lors de la tentative de lecture d'une propriété qui n'existe pas.
set est appelé lorsque vous essayez d'écrire une valeur dans une propriété qui n'existe pas.
isset est appelé lorsqu'on tente de détecter une propriété qui n'existe pas.
unset est appelé lorsque vous essayez de supprimer une propriété qui n'existe pas.

class test2 { 
public $name3; 
public function set($key, $value) { 
var_dump(function. ' 
KEY:' 
.$key.' 
Value:' 
.$value); 
} 
public function get($key) { 
var_dump(function. 'KEY:'.$key); 
} 
public function isset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
public function unset($key) { 
var_dump(function. ' KEY:'.$key); 
} 
} 
$t =new test2 ; 
$t->name = "steven"; 
$t->name2; 
$t->name3; 
isset($t->name2); 
isset($t->name3); 
unset($t->name4);

sleep est appelé lors de la sérialisation d'objets
wakeup est appelé lors de la désérialisation d'objets
Quelque chose à noter :
1. sleep() doit renvoyer un tableau ou un objet (généralement $this est retourné), et la valeur renvoyée sera utilisée comme valeur sérialisée
.
Si cette valeur n'est pas renvoyée, la sérialisation échoue. Cela signifie également que la désérialisation ne déclenchera pas l'événement de réveil.
2. La sérialisation enregistrera les attributs attribués par défaut. Si vous souhaitez attribuer le contenu par instanciation, les attributs doivent être spécifiés dans le
du tableau renvoyé par sleep(). différence entre $id et $id2.

class test3 { 
public $name = "steven"; 
public $id = "1"; public $id2; 
public function sleep() { 
var_dump(function); // 序列化不成功.没有返回值.反序列也失败 // 
return array("name"); // 序列化成功.有返回值.反序列成功.id2属性能被恢复 // 
return array("name", "id2");// 序列化成功.有返回值.反序列成功.id2属性不能被恢复 
return array("name"); } 
public function testEcho() { 
var_dump($this->name); 
var_dump($this->id); 
var_dump($this->id2); 
} 
public function wakeup() { 
var_dump(function); 
$this->testEcho(); 
} 
} 
$t3= new test3 ; 
$t3->id2 = uniqid(); 
$t3s = serialize($t3); 
unserialize($t3s);
toString Lors de l'impression directe d'un objet, cette méthode sera appelée

class test4 { 
public function toString() { 
return "toString"; 
} 
} 
$t4 = new test4(); 
echo $t4; 
print $t4; 
var_dump($t4); 
print_r($t4);

call($func, $param) Quand essayer d'appeler un objet qui n'existe pas est appelé.
Cette méthode doit avoir deux paramètres, le premier est le nom de la méthode appelée et le second est un tableau de paramètres de la méthode appelée.
Il est à noter que lorsque vous appelez la méthode privée de la classe parent dans une sous-classe, ou que vous appelez la méthode non protégée de la classe
dans une instance, call() ne sera pas appelé

class test5 { 
public function call($func, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
$t5 = new test5; 
$t5->echoTest('xx','xx','xx');

callStatic() est appelé lors de la tentative d'appel d'une méthode
static inexistante Cette méthode doit avoir deux paramètres, le premier est le nom de la méthode à appeler , et le second Le second est un tableau de paramètres de la méthode appelée.
Apparaît en PHP5.3

class test51 { 
public function callStatic($fun, $param) { 
var_dump('Function:'.$func); 
var_dump($param); 
} 
} 
test51::test('xx','xx','xx');
set_state() est appelé lors de l'utilisation de var_export pour exporter une instance. Cette méthode a un paramètre qui contient tous les

membres de l'instance exportée. attributs

class test6 { 
public function set_state($arr){ 
var_dump($arr); 
} 
} 
$t6 = new test6; 
$t6->age = "12"; 
var_export($t6, true); 
var_export($t6); 
eval(' 
$b=' 
.var_export($t6,true).';'); 
print_r($b);
clone() est appelé lors du clonage d'une instance

Remarque :
1 En php5, les affectations entre les objets sont toujours transmises par référence d'adresse
2. Si vous souhaitez transmettre la valeur réelle, vous devez utiliser le mot-clé clone
3. Clone n'est qu'une instance. Si un attribut membre de l'instance est également une instance, alors cet attribut membre sera toujours transmis à la nouvelle instance en utilisant la méthode de référence
.
// L'affectation entre les objets est toujours passée par référence d'adresse. Les attributs age de $t71 $t72 sont les mêmes

class test71 { 
public $age = 10; 
} 
$t71 = new test71(); 
$t72 = $t71 ; 
var_dump($t71->age) ; 
$t71->age =12 ; 
var_dump($t71->age) ; 
var_dump($t72->age) ; // 如果要以实际值来传递,则需要用到clone关键词 $t73 = clone $t71; $t71->age = 13 ; var_dump($t71->age) ; 
var_dump($t73->age) ; // 如果实例中的某个成员属性也是个实例,那么这个成员属性还是会以引用方法被传递到新的实例。
fonction autoload() , si la classe correspondante. n'existe pas, il s'appellera

function autoload($class) { 
   if ( $class == "test8" ){ 
require_once
 
dirname
(FILE).'/class8.php';  
} 
} 
spl_autoload(); 
$t8 = new test8; 
var_dump($t8->age);


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn