
| 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 :
<?php
function DestroyObject ($ name ){
$ theobject = & $ GLOBALS [ $ name ] ;
if (method_exists ($ theobject , " Destroy " ))
$theobject ->Destroy ();
unset ($ GLOBALS [ $ name ] );
}
class xyz{
var $ somevar ;
function xyz (){
}
function Destroy (){
echo (" Destruction d ' un objet ! " );
}
function SomeDo (){
echo (" On fait quelquechose : " . $this ->somevar );
}
}
$example = new xyz;
$example ->somevar = 3 ;
$example ->SomeDo ();
DestroyObject (" example " );
$example ->SomeDo ();
?>
|
<?php
class xyz {
var $ somevar ;
function xyz (){
}
function __sleep (){
echo (" Destruction d ' un objet ! " );
return array ();
}
function SomeDo (){
echo (" On fait quelquechose : " . $this ->somevar );
}
}
$example = new xyz;
$example ->somevar = 3 ;
$example ->SomeDo ();
serialize($ example );
unset($ example );
$example ->SomeDo ();
²
?>
|
|
| 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 ;
function B(){
static $ compteur ;
$this ->compteur = & $ compteur ;
(int) $this ->compteur + + ;
}
}
$B_test = new B();
echo $B_test ->compteur . " < br / > " ;
$B_test1 = new B();
echo $B_test1 ->compteur . " < br / > " ;
echo $B_test ->compteur . " < br / > " ;
|
Ce qui va générer la sortie suivante : On a bien simulé un attribut statique (ici il compte le nombre d'objets mais on peut imaginer d'autres utilisations).
|
| auteur : Julp |
La réponse est oui. Il faut tout de même savoir que les déclarations des différentes classes doivent être faites avant l'appel à session_start lorsque l'objet fait partie de la session courante (comprenez qu'il a été enregistré). Les déclarations des classes peuvent être chargées manuellement (fonctions require ou include) ou automatiquement (fonction magique __autoload). En voici un exemple pour illustrer :
class Utilisateur
{
var $ identifiant ;
var $ login ;
function Utilisateur($ id , $ login )
{
$this ->identifiant = $ id ;
$this ->login = $ login ;
}
function getLogin()
{
return $this ->login ;
}
function getIdentifiant()
{
return $this ->identifiant ;
}
}
|
Enregistrement dans la session :
Et enfin, utilisation des données de la session :
Remarques :
- Les attributs de type ressource ne sont pas sérialisables (une connexion à une base de données par exemple) ;
- Si la session est démarrée automatiquement (directive session.auto_start positionnée à 1), vous n'arriverez pas à utiliser directement des objets puisque les classes ne pourront être connues.
|
lien : Tutoriel : Les sessions en PHP, par julp et Mathieu Lemoine
lien : Comment sauvegarder une variable dans une session ?
|
| auteur : genova |
Avant sa version 5, PHP proposait seulement un modèle pseudo-objet qui ne propose ni constructeur ni destructeur réels.
Le code suivant est valide à la fois PHP4 et PHP5 : | <?php
class _model_
{
function _model_($ arg1 = NULL , $ arg2 = NULL , $ arg3 = NULL , $ arg4 = NULL , $ arg5 = NULL , $ arg6 = NULL , $ arg7 = NULL , $ arg8 = NULL , $ arg9 = NULL , $ arg10 = NULL , $ arg11 = NULL , $ arg12 = NULL )
{
register_shutdown_function(array (& $ this , ' __destruct ' ));
$ total = func_num_args();
if (! $ total )
{
$this ->__construct ();
}
else
{
$ args = $ pass = array ();
for ($ i = 1 ; $ i < = $ total & & $ i < = 12 ; $ i + + )
{
$ args [ ] = & $ { ' arg ' . $ i } ;
$ pass [ ] = ' $arg ' . $ i ;
}
eval(' $this->__construct( ' . implode(' , ' , $ pass ) . ' ); ' );
}
}
function __construct ()
{
}
function __destruct ()
{
}
function __toString ()
{
$ str = ' <b>Classname :</b> ' . get_class(& $ this ) . ' <br /> ' ;
$ str . = ' <b>Properties :</b><ul style="margin: 0"> ' ;
foreach ($ this AS $ property = > $ value )
{
$ str . = ' <li><b> ' . $ property . ' </b> = <pre style="display: inline"> ' . var_export($ value , TRUE ) . ' </pre></li> ' ;
}
$ str . = ' </ul> ' ;
return ($ str );
}
function __set ($ property , $ value )
{
$this -> $ property = $ value ;
}
function __get ($ property )
{
if (property_exists(& $ this , $ property ))
{
return ($this -> $ property );
}
return (NULL );
}
}
if (version_compare(phpversion(), ' 5.0 ' ) < 0 )
{
eval(' function clone($object){return($object);} ' );
}
?>
|
Exemple d'utilisation : | <?php
include(' class/model.php ' );
class Database extends _model_
{
var $ id ;
function __construct ($ server , $ login , $ pass , $ database )
{
$this ->id = mysql_connect($ server , $ login , $ pass );
mysql_select_db($ database )
}
function query($ sql )
{
return (mysql_query($ sql ) OR die(mysql_error()));
}
function __destruct ()
{
mysql_close($this ->id );
}
}
$db = new Database(' localhost ' , ' root ' , ' ' , ' dvp ' );
$db ->query (' SELECT * FROM ma_table ' );
?>
|
|
Consultez les autres F.A.Q.
Les sources présentés sur cette page sont libres 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. Tous 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érêts.
Cette page est déposée à la SACD.
|