Bonjour à tous,
je souhaitais faire un petit test rapide. J'ai donc écrit ce code :
<?php
error_reporting(E_ALL);
class Page
{
var $a = 0;
function get()
{
$me = Page::instance();
return $me->a;
}
function set($value)
{
$me = Page::instance();
$me->a = $value;
}
function & instance ()
{
static $instance = false;
if (!$instance)
{
$instance = new Page ();
}
return $instance;
}
}
echo Page::get()."< br >";
Page::set(3);
echo Page::get()."< br >";
?>
A l'execution, j'obtiens :
0
0
==> conclusion, la variable $a n'est pas modifié par la fonction set()
Ma première idée a été de vérifié que instance() ne re-créait pas l'objet à chaque appel.
==> La fonction instance() ne créer pas un nouvel objet à chaque fois qu'elle est appeler. (j'ai fait un simple echo() dans le if pour vérifier)
Je ne sais vraiment pas d'où peut venir ce problème. J'espère que ce n'est pas une erreur grossière.
Merci.
PS : la fonction instance() est issue du projet Copix, elle est vraiment pratique. Elle permet d'utiliser une classe tout en se passant de la création d'un objet.
# Peut-être que.......
Posté par Ph Husson (site web personnel) . Évalué à 1.
$page=new Page;
et utiliser $page->set(3)
apres
peut-etre que je me trompe
et peut-etre que t'utilises php5 qui a peut etre changé
ou alors tu peux aussi faire si j'ai bien compris le code
$page=Page::instance();
$page->set(3);
Je ne suis sur de rien la dedans faut tester :)
[^] # Re: Peut-être que.......
Posté par Ph Husson (site web personnel) . Évalué à 1.
function set($value)
{
$me = Page::instance();
$me->a = $value;
}
j'sui pas sur que ca marche
tu changes la class que t'as copié dans la variable $me
mais pas l'original avec ca
d'ailleurs pk faire ca?
cette "variable" existe deja
elle s'appelle $this
et est initialisé par defaut
donc tu peux viré une ligne pour mettre juste:
$this->a=$value;
voir meme tt simplement
$a=$vaulue;
(comme mon commentaire au dessus je dis ptet une connerie)
[^] # Re: Peut-être que.......
Posté par spongurex . Évalué à 2.
L'intérêt de cette méthode reside dans l'inutilité de déclarer l'objet.
Cela permet de s'assurer qu'aucun attribut ne peut être modifié par la page qui appelle la classe.
Et j'aime bien la présentation, je m'en sert pour programmer des plugins pour le site.
Concretement, au lieux de ça (par exemple) :
$date = new Date();
$date->forme('d m Y');
$date->affiche();
je peux écrire ça :
Date::forme('d m Y');
Date::affiche();
Et dans le deuxième cas, impossible d'aller modifié un attribut sans passer par une fonction ( set() par exemple. )
Pour le problème qui m'occupe, je viens de trouver la solution grace à ta suggestion :
Il faut donc remplacer :
par
Merci bien.
# euhhh
Posté par Tof . Évalué à 1.
soit cela suffit:
[^] # Re: euhhh
Posté par spongurex . Évalué à 2.
Puisque l'on utilise cette syntaxe : Page::get()
L'objet n'est pas déclaré. Donc $this n'est pas assigné.
[^] # Re: euhhh
Posté par Tof . Évalué à 1.
En même temps c'est un peu "pas propre" non ?
[^] # Re: euhhh
Posté par Didier (site web personnel) . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.