Services webmasters
Partenaires
Jeux concours gratuits
 
Utilisation des variables static
<<<
Les références avec la variables global et static Les variables
>>>

4.3.3 Portée des variables
4.3 Les variables
4 Référence
 Manuel PHP

Le mot clé global
Utilisation des variables static
->Les références avec la variables global et static

4.3.3.3 Les références avec la variables global et static

Le Zend Engine 1, sur qui repose PHP 4 , implémente les options static et global pour les variables, en terme de références. Par exemple, une vraie variable globale est importée dans un contexte de fonction avec global . Cette commande crée en fait une référence sur la variable globale. Ce peut vous mener à des comportement inattendus, comme par exemple :

Les variables statiques et les références

<?php
function test_global_ref() {
    global
$obj;
    
$obj = &new stdclass;
}

function
test_global_noref() {
    global
$obj;
    
$obj = new stdclass;
}

test_global_ref();
var_dump($obj);
test_global_noref();
var_dump($obj);
?>

Exécuter cet exemple vous donnera :


NULL
object(stdClass)(0) {
}

Un comportement similaire s'applique à la commande static . Les références ne sont pas stockées dynamiquement :

Les variables statiques et les références (2)

<?php
function &get_instance_ref() {
    static
$obj;

    echo
"Objet statique : ";
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Assigne une référence à une variable statique
        
$obj = &new stdclass;
    }
    
$obj->property++;
    return
$obj;
}

function &
get_instance_noref() {
    static
$obj;

    echo
"Objet statique : ";
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Assigne une objet à une variable statique
        
$obj = new stdclass;
    }
    
$obj->property++;
    return
$obj;
}

$obj1 = get_instance_ref();
$still_obj1 = get_instance_ref();
echo
"\n";
$obj2 = get_instance_noref();
$still_obj2 = get_instance_noref();
?>

Exécuter cet exemple vous donnera :


Objet statique : NULL
Objet statique : NULL

Objet statique : NULL
Objet statique : object(stdClass)(1) {
["property"]=>
int(1)
}

Ces exemples illustrent les problèmes rencontrés lors de l'assignation de référence à des variables statiques, qui sont oubliées lorsque vous appelez &get_instance_ref() une seconde fois.

<< Les références avec la variables global et static >>
Utilisation des variables static Portée des variables Les variables
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -