Maison >développement back-end >tutoriel php >Introduction aux constantes magiques (variables), aux méthodes magiques (fonctions) et aux variables superglobales de PHP

Introduction aux constantes magiques (variables), aux méthodes magiques (fonctions) et aux variables superglobales de PHP

不言
不言original
2018-07-05 11:29:372051parcourir

Cet article présente principalement l'introduction des constantes magiques (variables), des méthodes magiques (fonctions) et des variables superglobales. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

1. Constantes magiques (variables magiques)

Concept : Les constantes dites magiques sont des constantes prédéfinies par PHP. volonté Varie selon l'emplacement.

1. __LINE__ Obtenez le numéro de ligne actuel dans le fichier.

2. __FILE__ Obtenez le chemin complet et le nom du fichier.

3. __DIR__ Obtenez le répertoire où se trouve le fichier.

4. __FUNCTION__ Obtenez le nom de la fonction (récemment ajouté dans PHP 4.3.0).

5 __CLASS__ Obtenez le nom de la classe (récemment ajouté dans PHP 4.3.0).

6. __METHOD__ Obtenez le nom de la méthode de la classe (nouvellement ajouté dans PHP 5.0.0).

7. __NAMESPACE__ Le nom de l'espace de noms actuel (sensible à la casse).

8 __TRAIT__ Le nom du Trait (nouvellement ajouté dans PHP 5.4.0). Depuis PHP 5.4, cette constante renvoie le nom du trait tel qu'il a été défini (sensible à la casse). Le nom du trait inclut la portée dans laquelle il est déclaré (par exemple FooBar).

2. Super variables globales (9)

1. $GLOBALS : stocker les variables dans la portée globale 2. informations relatives au serveur
3. $_REQUEST : Obtenez les paramètres des requêtes POST et GET
4 $_POST : Obtenez les paramètres de la requête POST du formulaire
5. form
6. $_FILES : Récupère la variable du fichier téléchargé
7 $_ENV : Récupère le tableau des variables d'environnement côté serveur
8 $_COOKIE : Récupère le cookie du navigateur

Opération de cookie du navigateurDéfinir le cookie : setcookie(nom, valeur, expiration, chemin, domaine);
Obtenir le cookie : $_COOKIE["utilisateur" ];
Supprimer les cookies : setcookie("user", "", time()-3600);//Définir l'heure d'expiration

9. $_SESSION : Obtenir une session

Opération de session côté serveurAssurez-vous de démarrer session_start() avant d'utiliser session
Enregistrer la session : $_SESSION['name']=”leixuesong”;//Opération sur le tableau
Détruire la session : unset($_SESSION['views']);//Détruire une
session_destroy() et unset($_SESSION);//Détruire toutes les sessions

3. Méthode magique (fonction magique)

Concept : PHP convertit tout ce qui se termine par __ (deux les traits de soulignement) sont réservés comme méthodes magiques. Par conséquent, lors de la définition des méthodes de classe, à l'exception des méthodes magiques ci-dessus, il est recommandé de ne pas les préfixer par __.

sont respectivement : __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset (), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() et __debugInfo() sont appelés « méthodes magiques » en PHP. Vous ne pouvez pas utiliser ces noms de méthodes pour nommer vos propres méthodes de classe, sauf si vous souhaitez utiliser leur fonctionnalité magique.

1. Constructeur __construct() : Cette méthode est appelée en premier à chaque fois qu'un nouvel objet est créé (objet instancié), elle est donc très appropriée à faire avant utilisation de l'objet Quelques travaux d'initialisation.

Note d'application : Si un constructeur est défini dans une sous-classe, le constructeur de sa classe parent ne sera pas implicitement appelé. Pour exécuter le constructeur de la classe parent, vous devez appeler parent::__construct() dans le constructeur de la classe enfant. Si la sous-classe ne définit pas de constructeur, celle-ci sera héritée de la classe parent comme une méthode de classe ordinaire (si elle n'est pas définie comme privée).

Exemple d'application :

<?php
class BaseClass {   
function __construct() {       
print "In BaseClass constructor\n";
   }
}class SubClass extends BaseClass {   
function __construct() {
       parent::__construct();       
       print "In SubClass constructor\n";
   }
}class OtherSubClass extends BaseClass {    // inherits BaseClass&#39;s constructor}// In BaseClass constructor$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor$obj = new SubClass();// In BaseClass constructor$obj = new OtherSubClass();
?>

2. __destruct() Destructeur : Le destructeur sera Toutes les références à l'objet sont supprimés ou exécutés lorsque l'objet est explicitement détruit.

Comme le constructeur, le destructeur de la classe parent ne sera pas appelé secrètement par le moteur. Pour exécuter le destructeur de la classe parent, vous devez appeler explicitement

parent::__destruct() dans le corps du destructeur de la classe enfant. De plus, tout comme le constructeur, la sous-classe héritera de la classe parent si elle ne définit pas de destructeur. Le destructeur

est appelé même lorsque le script est terminé à l'aide de

exit(). L'appel de exit() dans le destructeur annulera le reste de l'opération d'arrêt.

Notes d'application :

1. Le destructeur est appelé à la fermeture du script. , À ce stade, tous les en-têtes HTTP ont été envoyés. Il est possible que le répertoire de travail lorsque le script est fermé soit différent de celui lorsqu'il se trouve dans un SAPI (comme Apache).

2. Tenter de lever une exception dans le destructeur (qui est appelé à la fin du script) entraînera une erreur fatale.

Exemple d'application :

<?phpclass A
{    function __construct()
    {        $a = func_get_args();        
    $i = func_num_args();        
    if (method_exists($this,$f=&#39;__construct&#39;.$i)) {            
    call_user_func_array(array($this,$f),$a);
        }
    }   
    function __construct1($a1)
    {        
    echo(&#39;__construct with 1 param called: &#39;.$a1.PHP_EOL);
    }   
    function __construct2($a1,$a2)
    {        
    echo(&#39;__construct with 2 params called: &#39;.$a1.&#39;,&#39;.$a2.PHP_EOL);
    }   
    function __construct3($a1,$a2,$a3)
    {        
    echo(&#39;__construct with 3 params called: &#39;.$a1.&#39;,&#39;.$a2.&#39;,&#39;.$a3.PHP_EOL);
    }
}$o = new A(&#39;sheep&#39;);
$o = new A(&#39;sheep&#39;,&#39;cat&#39;);
$o = new A(&#39;sheep&#39;,&#39;cat&#39;,&#39;dog&#39;);// results:
// __construct with 1 param called: sheep
// __construct with 2 params called: sheep,cat
// __construct with 3 params called: sheep,cat,dog
?>
3.

__call() : __call() sera appelé lorsqu'une méthode inaccessible est appelée dans l'objet.

public mixte __call ( chaîne , $nametableau ) $arguments

Le paramètre est le nom de la méthode à appeler. Parameters est un tableau d’énumération contenant les paramètres à transmettre à la méthode.

<?phpclass MethodTest 
{    public function __call($name, $arguments) 
    {        // 注意: $name 的值区分大小写        
    echo "Calling object method &#39;$name&#39; "
             . implode(&#39;, &#39;, $arguments). "\n";
    }    /**  PHP 5.3.0之后版本  */    
    public static function __callStatic($name, $arguments) 
    {        // 注意: $name 的值区分大小写        
    echo "Calling static method &#39;$name&#39; "
             . implode(&#39;, &#39;, $arguments). "\n";
    }
}$obj = new MethodTest;$obj->runTest(&#39;in object context&#39;);

MethodTest::runTest(&#39;in static context&#39;);  // PHP 5.3.0之后版本
?>

4. __callStatic() : Lorsqu'une méthode inaccessible est appelée dans un contexte statique, __callStatic() sera appelée. .

5. __set() : lors de l'attribution. une valeur à une propriété inaccessible, __set() sera appelée.

6. __get() : Lire quand la valeur de la propriété n'est pas accessible, __get() est appelé.

7、__isset()  : 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。

8、__unset() : 当对不可访问属性调用 unset() 时,__unset() 会被调用。

9、__sleep() :方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。与之相反,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

10、__wakeup() :经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

应用范例:

<?php
class Connection 
{    protected $link;    
private $server, $username, $password, $db;    
    public function __construct($server, $username, $password, $db)
    {        $this->server = $server;        
    $this->username = $username;        
    $this->password = $password;        
    $this->db = $db;        
    $this->connect();
    }    
    private function connect()
    {        
    $this->link = mysql_connect($this->server, $this->username, $this->password);        
    mysql_select_db($this->db, $this->link);
    }    
    public function __sleep()
    {        
    return array(&#39;server&#39;, &#39;username&#39;, &#39;password&#39;, &#39;db&#39;);
    }    
    public function __wakeup()
    {        
    $this->connect();
    }
}
?>

11、__toString() :__toString() 方法用于一个类被当成字符串时回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

<?php// Declare a simple classclass TestClass
{    public $foo;    public function __construct($foo) 
    {        $this->foo = $foo;
    }    public function __toString() {        return $this->foo;
    }
}$class = new TestClass(&#39;Hello&#39;);echo $class; //输出 Hello
?>

11、__invoke() :当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。(本特性只在 PHP 5.3.0 及以上版本有效)

<?phpclass CallableClass 
{    function __invoke($x) {        
var_dump($x);
    }
}
$obj = new CallableClass;$obj(5);
var_dump(is_callable($obj));   // is_callable — 检测参数是否为合法的可调用结构
?>以上会输出:
int(5)
bool(true)

12、__set_state() :自 PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。本方法的唯一参数是一个数组,其中包含按 array('property' => value, ...) 格式排列的类属性。

应用范例:

<?phpclass A
{    public $var1;   
public $var2;    
public static function __set_state($an_array) // As of PHP 5.1.0    {        
$obj = new A;        
$obj->var1 = $an_array[&#39;var1&#39;];        
$obj->var2 = $an_array[&#39;var2&#39;];        
return $obj;
    }
}$a = new A;
$a->var1 = 5;$a->var2 = &#39;foo&#39;;
eval(&#39;$b = &#39; . var_export($a, true) . &#39;;&#39;); // $b = A::__set_state(array(
                                            //    &#39;var1&#39; => 5,
                                            //    &#39;var2&#39; => &#39;foo&#39;,
                                            // ));var_dump($b);

?>以上例程会输出:object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>  string(3) "foo"}

13、__clone():对象复制。当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)

应用范例:

<?php
class SubObject
{    
static $instances = 0;    
public $instance;    
public function __construct() {        
$this->instance = ++self::$instances;
    }    
    public function __clone() {        
    $this->instance = ++self::$instances;
    }
}class MyCloneable
{    
public $object1;    
public $object2;    
function __clone()
    {      
        // 强制复制一份this->object, 否则仍然指向同一个对象        
        $this->object1 = clone $this->object1;
    }
}$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("Original Object:\n");
print_r($obj);
print("Cloned Object:\n");
print_r($obj2);
?>
以上例程会输出:
Original Object:MyCloneable Object(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Cloned Object:MyCloneable Object(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php中static、final、interface、abstract的区别

PHP empty()函数的说明

PHP测试memcached 的方法

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