Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment simuler les propriétés (attributs) statiques en PHP4 ?
auteur : vdemeester
Les attributs static, dans les versions antécédentes à PHP 5 ne sont pas intégrés à PHP.. Pourtant il y a un moyen de les simuler.
class B{
    var $compteur; // variable à priori static qui va compter combien d'objet ont été créés...
    
    function B(){
        static $compteur; // déclarée en statique
        $this->compteur =& $compteur; // passage en référence
        (int) $this->compteur++; // j'incrémente cette variable
    }
}

$B_test = new B(); // le compteur est incrémenté de 1
echo $B_test->compteur . "<br />";
$B_test1 = new B(); // le compteur est incrémenté de 1 donc devient 2
echo $B_test1->compteur . "<br />";
echo $B_test->compteur . "<br />";
Ce qui va générer la sortie suivante :
1
2
2
On a bien simulé un attribut statique (ici il compte le nombre d'objets mais on peut imaginer d'autres utilisations).


Comment détruire explicitement un objet en PHP4 ?
auteurs : vdemeester, Jérôme
En PHP 4, si les objets peuvent posséder un constructeur, il n'a pas été prévu dans l'implémentation du langage de méthode destructeur.
Voici deux façons de détruire un objet en simulant une méthode destructeur.

Exemple 1 :
<?
function DestroyObject ($name){
    $theobject = &$GLOBALS[$name];
    if (method_exists ($theobject,"Destroy"))
        $theobject->Destroy ();
    unset ($GLOBALS[$name]);
}

class xyz{
    var $somevar;

    // ### Constructeur
    function xyz (){
    }

    // ### Méthode Destructeur
    function Destroy (){
        echo ("Destruction d'un objet!");
        // ici du code qui va fermer proprement la connexion à une BDD, écrire dans un fichier, etc...
    }

    function SomeDo (){
        echo ("On fait quelquechose: ".$this->somevar);
    }
}

$example = new xyz;

$example->somevar = 3;
$example->SomeDo();

DestroyObject ("example");

// ### Il devrait y avoir une erreur
$example->SomeDo ();

?>
Exemple 2: utilisation de la méthode prédéfinie __sleep() et de la fonction serialize()
<?
class xyz {
    var $somevar;

    // ### Constructeur
    function xyz (){
    }

    // ### Méthode Destructeur
    function __sleep (){
        echo ("Destruction d'un objet!");
        // ici du code qui va fermer proprement la connexion à une BDD, écrire dans un fichier, etc...
        return array(); // on doît nécéssairement retourner un tableau, même vide
    }

    function SomeDo (){
        echo ("On fait quelquechose: ".$this->somevar);
    }
}

$example = new xyz;

$example->somevar = 3;
$example->SomeDo();

serialize($example);
unset($example);

// ### Il devrait y avoir une erreur
$example->SomeDo ();

?>

Comment utiliser un nom de classe créé dynamiquement ?
auteur : Forum PHP
Pour créer une instance d'une classe à partir d'un nom de classe créé dynamiquement, il suffit d'avoir le nom de la classe sous forme de chaine de caractères.

Exemple :
$nomClasse = 'Membre';
$objet =& new $nomClasse(); // l'objet est une instance de la classe Membre
La chaine de caractères peut-être construite de n'importe quel façon que ce soit par concaténation ou à partir d'une information tirée d'une base de données par exemple.

lien : faq Comment appeler une variable dont le nom est stocké dans une autre variable?

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2003  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com