JeuWeb - Crée ton jeu par navigateur
[Résolu] Réaffecter un objet en son sein en PHP5 - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Réaffecter un objet en son sein en PHP5 (/showthread.php?tid=2961)



[Résolu] Réaffecter un objet en son sein en PHP5 - Zamentur - 26-08-2008

Bon voilà donc je voudrais réassigner un objet à l'intérieur de cet objet en PHP5.
Exemple qui fonctionne je crois en PHP4:
Code PHP :
<?php 
class test {
function
test ($string) {
$this=$string;
}
}
echo new
test('ok');

Le hic c'est que là même chose ne fonctionne pas depuis PHP5 (peut être 5.1)...
Et moi pour des raisons pratiques et de rapidité de script j'aimerai que quand je créer un nouvel objet requete avec une seul donnée et une seul ligne:
Code PHP :
<?php 
$ma_donnee
=new Requete_mysql("SELECT `ma_donnee` FROM `ma_table` WHERE `id`=%d",array(1),false,true);
echo
$ma_donnee;
//Plutot que
$req=new Requete_mysql("SELECT `ma_donnee` FROM `ma_table` WHERE `id`=%d",array(1),false,true);
echo
$req->ma_donnee;

Quelqu'un sait il comment faire çà?


RE: Réaffecter un objet en son sein en PHP5 - Zamentur - 26-08-2008

Une idée incomplète que je viens de penser c'est d'utiliser __ToString().
Cependant, l'idée était de détruire l'objet juste après, mais c'est peut être pas une mauvaise idée.
Enfin pour le moment je suis en quête d'une vrai solution

Edit: en fait je viens de me souvenir pourquoi çà ne va pas, c'est simplement parce que dans ce cas faudrais que je mette devant un castage vers une string, et l'idée c'était vraiment de simplifier au max.


RE: Réaffecter un objet en son sein en PHP5 - Zamentur - 26-08-2008

A me simplifier la vie et à détruire un objet qui n'a plus besoin d'être.


RE: Réaffecter un objet en son sein en PHP5 - Nambew - 27-08-2008

La réaffectation d'objet à toujours été déconseillé en php, dans tous les langages en fait, mais en particulier en PHP puisqu'il n'y a pas de typage stricte. En gros ce que t'essaie de faire, c'est de reproduire le comportement d'une fonction en instanciant une classe ce qui n'a aucun sens. Dans ton cas, autant utiliser une fonction ou user ton clavier. Ça pourrait être une méthode, mais ça risque d'user aussi ton clavier.


RE: Réaffecter un objet en son sein en PHP5 - Zamentur - 27-08-2008

J'ai bien compris pourquoi çà avais été désactivé en PHP5.

Mais je ne pense pas que ce que j'essaye de faire c'est de reproduire le comportement d'une fonction.
En apparence on peut se dire que oui avec l'exemple donné, mais cet exemple est un cas particulier (que j'utilise beaucoup) parmi les fonctionnalités de cette classe.

Le trucs c'est que dans ce cas précis il n'y a pas lieu de les utiliser. Cependant j'ai pas forcément envie d'utiliser une fonction qui choisisse entre me créer mon objet ou me donnée la valeur (ce qui en termes de résultat reviens strictement au même sauf que du coup j'ai une fonction...)

Enfin en l'occurrence j'ai effectivement modifié une méthode de mon objet connexion de façon à faire ce que je souhaite, mais je suis pas fan du tout de cette solution.

Je me demande d'ailleurs si avec des fonctions comme extract() il ne serait pas possible de réécrire la table des symboles.
EDIT: Réponse non car la table des symboles n'est accessible avec extract() que dans la visibilité ou elle est exécutée...


RE: Réaffecter un objet en son sein en PHP5 - Zamentur - 27-08-2008

Ouai ce que tu viens de dire, viens de me faire pensé à une optimisation de la solution de secours.
Bon pour le unset suivis d'un new j'ai pas bien compris...

Personnellement je ne trouve pas que la réaffectation au sein d'un objet soit crade, même si je comprend bien ce qui vous gène. De plus, le design pattern Singleton serait plus simple si c'était possible (et à mon sens plus beau d'un point de vue résultat).
Peut être changerais-je d'avis un jour...

En tout cas merci pour vos réactions.