cs_vega11
Messages postés39Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention15 juillet 2010
-
10 mars 2007 à 19:49
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 2015
-
11 mars 2007 à 21:50
Bonjour à tous, je refais actuellement mon site en php objet 5 après un super stage en JAVA, je trouve le php réellement sympa en objet ^^
Une chose me chagrine je ne trouve pas comment faire une surcharge de constructeur, je m'explique.
Pour ma classe Message, j'ai besoin de 2 constructeurs.
un qui s'initialise avec l'id quand je recup tous les id des messages d'une personne et que je boucle pour créer chaque message et les charger.
un qui fonctionne sans parametres lorsque je fais appel à une methode d'envoi de message et donc l'id sera mis lors de l'INSERT dans la base.
function __construct($id){
$this->id=$id;
}
j'ai essayé de mettre le deuxieme comme ceci :
function __construct(){
}
mais ca ne marche pas et si je ne met pas de deuxieme constructeur je ne peux de tte facon pas instancier la classe sans le parametre id.
j'ai aussi beaucoup avancé au niveau des classes avec un pseudo singleton sur ma classe Database car toutes les requetes passe par elle et je réutilise donc mon objet instancié de Database assez souvent dans les autres classes.
2 exemples :
1) dans la classe User (méthode envoi de mess)
function sendMessageTo($receiver,$message){
$message->setSender($this->getLogin());
$message->setReceiver($receiver);
$db=Database::getCurrent(); //methode statique qui renvoi la database courante ^^
$db->sendMessage($message);
}
qui se traduit dans la classe Database par
function sendMessage($message){
$this->queryUpdate($this->sendMessageQueryString($message));
}
2) dans la classe user (méthode qui charge les infos dans l'objet)
Je programme en objet depuis seulement 2 mois si je compte le stage donc toutes les précisions sont le bienvenu.
J'aimerais donc une solution pour la surcharge et votre avis sur mon debut d'architecture objet.
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 10 mars 2007 à 20:30
Salut,
Pour le premier point, tu peux définir une valeur par défaut pour tes paramètres:
function ( $param = 'valeur par défaut' ) {
echo $param;
}
ça marche aussi pour le constructeur :
public function __construct( $id = false ) {
if ( $id === false ) // action sans paramètres
else // action avec l'id
}
Pour ton deuxième point, cherche la doc sur les fonctions magiques __set() et __get()... Ca surcharge la façon de modifier, récupérer un paramètre de classe...
Tu peux alors t'amuser à faire comme le premier exemple, utiliser un tableau pour stocker les variables... du coup, tu pourrais toutes les charger d'un coup...
$object->x = $array_info;
Sinon, un foreach sur un objet te permet de faire
foreach ($object as $property=>$value) $object->$property = $new_value;
DiGhan
Messages postés239Date d'inscriptionsamedi 21 février 2004StatutMembreDernière intervention 3 juin 20101 10 mars 2007 à 21:00
Salut,
php n'offre pas la possibilité d'implémenter plusieurs constructeurs avec des signatures différentes. La seule solution est d'utiliser les fonctions func_get_num_args() pour connaitre le nombre de paramètres et func_get_args() ou func_get_arg() pour récupérer les valeurs des paramètres.
ex:
class CConstruct
{
public __construct()
{
$nArgs = func_get_num_args();
switch($nArgs)
{
case 0:
case 1:
default:
ect ect ...
}
}
}