Comment acceder aux fonctions d'un ch amp de classe retourne par une fonction ?
9 réponses
Aurelien Barbier-Accary
Bonjour,
je viens du C++ et l'utilisation des classes en Php4 me laisse perplexe.
Je précise tout de suite que je ne peux pas utiliser du Php5 qui apparemment est
la première version véritablement objet de Php.
Conscient que le sujet de ce post est un peu vaseux et afin de bien expliquer
mon problème, voici un exemple minimum :
<?php
class cA
{
function truc($msg)
{
echo "<p>$msg</p>\n";
}
}
Dans les deux derniers cas le plantage renvoie :
Fatal error: Call to undefined function: truc() in debug.php on line 36
Remarque, si on utilise une "->" plutôt qu'un ".", l'erreur est alors :
Parse error: parse error in debug.php on line 36
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe
par des fonctions ? J'ai l'impression que le "type de l'objet retourné est
inconnu", ceci étant une interprétation à la C++ :-)
Mon but est de faire quelque chose s'approchant le plus possible de ce qui sera
fait lorsque je pourrais utiliser du Php5, et donc de ne pas utiliser si
possible la deuxième écriture.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
bruno at modulix
Aurelien Barbier-Accary wrote:
Bonjour,
je viens du C++ et l'utilisation des classes en Php4 me laisse perplexe.
C'est normal. Honnêtement, en php4, les classes relèvent plus du gadget que de l'OO (même si elles rendent bien service vu d'autres limitations du langage).
Je précise tout de suite que je ne peux pas utiliser du Php5 qui apparemment est la première version véritablement objet de Php.
"véritablement" ? pouf pouf pouf... <troll mode="je vais encore me faire des copains"> un langage qui manipule autre chose que des objet n'est pas un langage "véritablement" objet - ce qui exclue C++ et Java des langages "véritablement" objets, alors ne parlons pas de php... !-) </troll>
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce soit par copie ou par référence) et tu veut chainer les appels de méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La notation pointée n'existe pas en php (ou plus exactement, le point est l'opérateur de concaténation de chaines).
Dans les deux derniers cas le plantage renvoie : Fatal error: Call to undefined function: truc() in debug.php on line 36
Oui, avec le point, php essaie de: - évaluer $obj->refcA(), - évaluer truc() (comme étant une fonction, pas une méthode de A), - et concaténer les deux
Remarque, si on utilise une "->" plutôt qu'un ".", l'erreur est alors : Parse error: parse error in debug.php on line 36
Oui, cf ci-avant: ce n'est pas une syntaxe valide en php4.
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Aurelien Barbier-Accary wrote:
Bonjour,
je viens du C++ et l'utilisation des classes en Php4 me laisse perplexe.
C'est normal. Honnêtement, en php4, les classes relèvent plus du gadget
que de l'OO (même si elles rendent bien service vu d'autres limitations
du langage).
Je précise tout de suite que je ne peux pas utiliser du Php5 qui
apparemment est la première version véritablement objet de Php.
"véritablement" ? pouf pouf pouf...
<troll mode="je vais encore me faire des copains">
un langage qui manipule autre chose que des objet n'est pas un langage
"véritablement" objet - ce qui exclue C++ et Java des langages
"véritablement" objets, alors ne parlons pas de php... !-)
</troll>
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce
soit par copie ou par référence) et tu veut chainer les appels de
méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La notation pointée n'existe pas en php (ou plus exactement, le point
est l'opérateur de concaténation de chaines).
Dans les deux derniers cas le plantage renvoie :
Fatal error: Call to undefined function: truc() in debug.php on line 36
Oui, avec le point, php essaie de:
- évaluer $obj->refcA(),
- évaluer truc() (comme étant une fonction, pas une méthode de A),
- et concaténer les deux
Remarque, si on utilise une "->" plutôt qu'un ".", l'erreur est alors :
Parse error: parse error in debug.php on line 36
Oui, cf ci-avant: ce n'est pas une syntaxe valide en php4.
Finalement, comment doit-on procéder pour avoir un accès aux champs
d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
je viens du C++ et l'utilisation des classes en Php4 me laisse perplexe.
C'est normal. Honnêtement, en php4, les classes relèvent plus du gadget que de l'OO (même si elles rendent bien service vu d'autres limitations du langage).
Je précise tout de suite que je ne peux pas utiliser du Php5 qui apparemment est la première version véritablement objet de Php.
"véritablement" ? pouf pouf pouf... <troll mode="je vais encore me faire des copains"> un langage qui manipule autre chose que des objet n'est pas un langage "véritablement" objet - ce qui exclue C++ et Java des langages "véritablement" objets, alors ne parlons pas de php... !-) </troll>
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce soit par copie ou par référence) et tu veut chainer les appels de méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La notation pointée n'existe pas en php (ou plus exactement, le point est l'opérateur de concaténation de chaines).
Dans les deux derniers cas le plantage renvoie : Fatal error: Call to undefined function: truc() in debug.php on line 36
Oui, avec le point, php essaie de: - évaluer $obj->refcA(), - évaluer truc() (comme étant une fonction, pas une méthode de A), - et concaténer les deux
Remarque, si on utilise une "->" plutôt qu'un ".", l'erreur est alors : Parse error: parse error in debug.php on line 36
Oui, cf ci-avant: ce n'est pas une syntaxe valide en php4.
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
dmetzler
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc ça va pas t'aider ;)
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc
ça va pas t'aider ;)
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc ça va pas t'aider ;)
Aurelien Barbier-Accary
Aurelien Barbier-Accary wrote:
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce soit par copie ou par référence) et tu veut chainer les appels de méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La réponse est simple: *ce n'est pas possible*.
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage, il n'y a que pour les tableaux qu'il est bien pratique. Enfin ça dépanne et je verrai ce qu'il en est avec Php5 quand j'y aurai accès. En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-) même si moi je considère le C++ comme un LOO :-)
Aurelien Barbier-Accary wrote:
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce
soit par copie ou par référence) et tu veut chainer les appels de
méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La réponse est simple:
*ce n'est pas possible*.
Finalement, comment doit-on procéder pour avoir un accès aux champs
d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage, il n'y a que pour les tableaux qu'il est bien
pratique. Enfin ça dépanne et je verrai ce qu'il en est avec Php5 quand j'y
aurai accès.
En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-) même si moi je considère le C++ comme
un LOO :-)
Conscient que le sujet de ce post est un peu vaseux
Non, c'est très clair: tu a une méthode qui retourne un objet (que ce soit par copie ou par référence) et tu veut chainer les appels de méthodes, ie : $unObj->methodeQuiRetourneUnAutreObj()->attributDeAutreObj;
La réponse est simple: *ce n'est pas possible*.
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage, il n'y a que pour les tableaux qu'il est bien pratique. Enfin ça dépanne et je verrai ce qu'il en est avec Php5 quand j'y aurai accès. En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-) même si moi je considère le C++ comme un LOO :-)
Stan
"bruno at modulix" a écrit dans le message de news:43688542$0$4345$ | > Je précise tout de suite que je ne peux pas utiliser du Php5 qui | > apparemment est la première version véritablement objet de Php. | | "véritablement" ? pouf pouf pouf... | <troll mode="je vais encore me faire des copains"> | un langage qui manipule autre chose que des objet n'est pas un langage | "véritablement" objet - ce qui exclue C++ et Java des langages | "véritablement" objets, alors ne parlons pas de php... !-) | </troll> |
Il y a des nuances dans la définition de langage de programmation objet. Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est parlante ). Même si le langage ne manipule pas tout en objet, ce n'est pas forcément rédibitoire.
-- -Stan
"bruno at modulix" <onurb@xiludom.gro> a écrit dans le message de
news:43688542$0$4345$626a54ce@news.free.fr...
| > Je précise tout de suite que je ne peux pas utiliser du Php5 qui
| > apparemment est la première version véritablement objet de Php.
|
| "véritablement" ? pouf pouf pouf...
| <troll mode="je vais encore me faire des copains">
| un langage qui manipule autre chose que des objet n'est pas un langage
| "véritablement" objet - ce qui exclue C++ et Java des langages
| "véritablement" objets, alors ne parlons pas de php... !-)
| </troll>
|
Il y a des nuances dans la définition de langage de programmation objet.
Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est
parlante ).
Même si le langage ne manipule pas tout en objet, ce n'est pas forcément
rédibitoire.
"bruno at modulix" a écrit dans le message de news:43688542$0$4345$ | > Je précise tout de suite que je ne peux pas utiliser du Php5 qui | > apparemment est la première version véritablement objet de Php. | | "véritablement" ? pouf pouf pouf... | <troll mode="je vais encore me faire des copains"> | un langage qui manipule autre chose que des objet n'est pas un langage | "véritablement" objet - ce qui exclue C++ et Java des langages | "véritablement" objets, alors ne parlons pas de php... !-) | </troll> |
Il y a des nuances dans la définition de langage de programmation objet. Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est parlante ). Même si le langage ne manipule pas tout en objet, ce n'est pas forcément rédibitoire.
-- -Stan
bruno at modulix
Stan wrote: (snip)
Il y a des nuances dans la définition de langage de programmation objet.
Non ? Pas vrai ?-)
A vrai dire, personne n'a même jamais été foutu de se mettre d'accord sur la défintion de "objet".
Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est parlante ).
<troll> SMMEB, la bonne définition est "assembleur orienté objet"... Là aussi, la subtilité est parlante !-) </troll>
Même si le langage ne manipule pas tout en objet, ce n'est pas forcément rédibitoire.
Non - sauf pour faire de la programmation objet.
Quand je parles de tout-objet, je pense vraiment *tout* (fonctions et classes inclues [1]...).
Paradoxalement, ça n'implique pas forcément de devoir tout mettre dans des classes...
[1] Smalltalk va même plus loin puisque même les structures de contrôle traditionnelles (boucles et branchements) sont construites sur des envois de messages paramétrés par des blocs de code...
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Stan wrote:
(snip)
Il y a des nuances dans la définition de langage de programmation objet.
Non ? Pas vrai ?-)
A vrai dire, personne n'a même jamais été foutu de se mettre d'accord
sur la défintion de "objet".
Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est
parlante ).
<troll>
SMMEB, la bonne définition est "assembleur orienté objet"... Là aussi,
la subtilité est parlante !-)
</troll>
Même si le langage ne manipule pas tout en objet, ce n'est pas forcément
rédibitoire.
Non - sauf pour faire de la programmation objet.
Quand je parles de tout-objet, je pense vraiment *tout* (fonctions et
classes inclues [1]...).
Paradoxalement, ça n'implique pas forcément de devoir tout mettre dans
des classes...
[1] Smalltalk va même plus loin puisque même les structures de contrôle
traditionnelles (boucles et branchements) sont construites sur des
envois de messages paramétrés par des blocs de code...
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
Il y a des nuances dans la définition de langage de programmation objet.
Non ? Pas vrai ?-)
A vrai dire, personne n'a même jamais été foutu de se mettre d'accord sur la défintion de "objet".
Par ex, on dit plus de C++ qu'il est orienté objet ( la subtilité est parlante ).
<troll> SMMEB, la bonne définition est "assembleur orienté objet"... Là aussi, la subtilité est parlante !-) </troll>
Même si le langage ne manipule pas tout en objet, ce n'est pas forcément rédibitoire.
Non - sauf pour faire de la programmation objet.
Quand je parles de tout-objet, je pense vraiment *tout* (fonctions et classes inclues [1]...).
Paradoxalement, ça n'implique pas forcément de devoir tout mettre dans des classes...
[1] Smalltalk va même plus loin puisque même les structures de contrôle traditionnelles (boucles et branchements) sont construites sur des envois de messages paramétrés par des blocs de code...
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
bruno at modulix
Aurelien Barbier-Accary wrote:
Aurelien Barbier-Accary wrote:
(snip)
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage,
Ca dépend pour quoi... Quand on se souvient de ce pour quoi PHP a été conçu à l'origine, il le fait plutôt bien.
En fait, la recette pour une bonne appli en php, c'est : 1/ faire simple, 2/ faire simple, 3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux inefficace.
il n'y a que pour les tableaux qu'il est bien pratique.
Mouais, et encore... Mais bon, c'est clair que c'est *la* structure de donnée essentielle en PHP.
Enfin ça dépanne
Pour certaines choses, c'est certainement plus pratique que du C++ !-)
et je verrai ce qu'il en est avec Php5 quand j'y aurai accès. En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-)
merci, bien aimable !-)
même si moi je considère le C++ comme un LOO :-)
T'a oublié les balises <troll>, là, non ?-)
<hs> Jamais joué avec Python ou Ruby ? </hs>
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Aurelien Barbier-Accary wrote:
Aurelien Barbier-Accary wrote:
(snip)
Finalement, comment doit-on procéder pour avoir un accès aux champs
d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage,
Ca dépend pour quoi... Quand on se souvient de ce pour quoi PHP a été
conçu à l'origine, il le fait plutôt bien.
En fait, la recette pour une bonne appli en php, c'est :
1/ faire simple,
2/ faire simple,
3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux
inefficace.
il n'y a que pour les tableaux qu'il
est bien pratique.
Mouais, et encore... Mais bon, c'est clair que c'est *la* structure de
donnée essentielle en PHP.
Enfin ça dépanne
Pour certaines choses, c'est certainement plus pratique que du C++ !-)
et je verrai ce qu'il en est avec
Php5 quand j'y aurai accès.
En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-)
merci, bien aimable !-)
même si moi je considère le
C++ comme un LOO :-)
T'a oublié les balises <troll>, là, non ?-)
<hs>
Jamais joué avec Python ou Ruby ?
</hs>
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
Finalement, comment doit-on procéder pour avoir un accès aux champs d'une classe par des fonctions ?
En l'occurrence, il faut passer par une variable intermédiaire :(
Mouais, pas au point ce langage,
Ca dépend pour quoi... Quand on se souvient de ce pour quoi PHP a été conçu à l'origine, il le fait plutôt bien.
En fait, la recette pour une bonne appli en php, c'est : 1/ faire simple, 2/ faire simple, 3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux inefficace.
il n'y a que pour les tableaux qu'il est bien pratique.
Mouais, et encore... Mais bon, c'est clair que c'est *la* structure de donnée essentielle en PHP.
Enfin ça dépanne
Pour certaines choses, c'est certainement plus pratique que du C++ !-)
et je verrai ce qu'il en est avec Php5 quand j'y aurai accès. En tous cas merci beaucoup pour l'info.
Du coup pour ton troll je te soutiens :-)
merci, bien aimable !-)
même si moi je considère le C++ comme un LOO :-)
T'a oublié les balises <troll>, là, non ?-)
<hs> Jamais joué avec Python ou Ruby ? </hs>
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
John GALLET
En fait, la recette pour une bonne appli en php, c'est : 1/ faire simple, 2/ faire simple, 3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux inefficace.
"Dans mes bras" (tm).
Je n'ai à ajouter qu'une précision : la même recette s'applique aussi très bien dans d'autres langages, le but de l'exercice est de faire au plus simple sans être simpliste.
a++; JG
En fait, la recette pour une bonne appli en php, c'est :
1/ faire simple,
2/ faire simple,
3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux
inefficace.
"Dans mes bras" (tm).
Je n'ai à ajouter qu'une précision : la même recette s'applique aussi
très bien dans d'autres langages, le but de l'exercice est de faire au
plus simple sans être simpliste.
En fait, la recette pour une bonne appli en php, c'est : 1/ faire simple, 2/ faire simple, 3/ (pour les experts seulements) faire encore plus simple.
Bref, n'essaye pas de porter tes idiomes C++ en PHP, ce sera au mieux inefficace.
"Dans mes bras" (tm).
Je n'ai à ajouter qu'une précision : la même recette s'applique aussi très bien dans d'autres langages, le but de l'exercice est de faire au plus simple sans être simpliste.
a++; JG
Aurelien Barbier-Accary
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc ça va pas t'aider ;)
et est-ce que je peux tester la version de php et faire des implémentations différentes en fonction ? Si oui comment ? :-)
Ok ce n'est pas super utile puisqu'en théorie ça ne tourne que sur un serveur qui ne dispose que d'une version de php mais comme mon but est de faire quelque chose de portable...
Merci.
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc
ça va pas t'aider ;)
et est-ce que je peux tester la version de php et faire des implémentations
différentes en fonction ? Si oui comment ? :-)
Ok ce n'est pas super utile puisqu'en théorie ça ne tourne que sur un serveur
qui ne dispose que d'une version de php mais comme mon but est de faire quelque
chose de portable...
Bon sinon, ça marche en PHP5.... mais tu ne peux pas avoir PHP5 donc ça va pas t'aider ;)
et est-ce que je peux tester la version de php et faire des implémentations différentes en fonction ? Si oui comment ? :-)
Ok ce n'est pas super utile puisqu'en théorie ça ne tourne que sur un serveur qui ne dispose que d'une version de php mais comme mon but est de faire quelque chose de portable...