1

comment faire un tableau contenant des classes en php ?

je suis oblige de faire 12000 new ?!
et la le mec il le pécho par le bras et il lui dit '

2

pas compris la problématique cheeky
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

3

Si j'ai bien compris la question, c'est que là où en C++ on peut faire "MaClasse tableau[100];", en PHP il n'y a pas moyen d'obtenir un objet sans l'instancier explicitement avec "new". Et à ma connaissance la réponse est oui, tu es obligé de faire un new par case de ton tableau :/
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4

meme réponse.

$tab = array();
for($k=0;$k<100;$k++) $tab[$k] = new ...;
Ancien pseudo : lolo

5

ok :/ merci
et la le mec il le pécho par le bras et il lui dit '

6

Je pense que ceci doit fonctionner aussi, et être beaucoup plus rapide :
$tableau = array_fill(0, 100, new MaClasse());

7

ben non, ça remplit le tableau avec 100 références vers la même instance de classe :/

il faudrait une fonction qui fonctionnerait avec ce genre de syntaxe : array_map (0, 100, "new MaClasse ()"), pour retarder l'évaluation du new, mais je ne sais pas si ça existe en php.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

nop, il ne me semble pas que ca existe, mais en tout cas, meme remarque que zeph : ca te remplit ton tableau avec la meme instance
Ancien pseudo : lolo

9

Non, faux. Ce sont 100 copies indépendantes de l'objet.

<?
class Classe { var $i; }

$tableau = array_fill(0, 5, new Classe());

for ($i = 0; $i < 5; $i++) $tableau[$i]->i = "Objet $i\n";

echo $tableau[0]->i, $tableau[1]->i, $tableau[2]->i, $tableau[3]->i, $tableau[4]->i;
?>
Objet 0
Objet 1
Objet 2
Objet 3
Objet 4

Faut réviser vot' php les gars tongue
De manière générale, en PHP, toute assignation est une copie de l'objet, sauf spécification contraire explicite, par l'opérateur de référencement &.

$A = new Classe();
$A->i = 42;
$B = $A;
$A->i = 4242;
echo $B->i;     /* affichera 42 */

10

je viens de tester moi aussi :
class	Test
{
	var	$a;
}

$array = array_fill (0, 100, new Test ());

$array[0]->a = "plop";
$array[1]->a = "aaaa";

echo $array[0]->a;

=> résultat
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

rahhhhhhhhhh

autant pour moi Spectras


au passage, j'adore ta 6gnature
Ancien pseudo : lolo

12

y'a un mystère à éclaircir, à supposer que Spectras ait testé son code, parceque ce que j'ai constaté semble me donner raison (cf screenshot du ./10)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

13

heuuuuuuuuu


je viens d'excuter ton code Zeph, et j'ai eu plop moi, comme résultat....

c'est quoi ce gag ?

PHP4, PHP 5 ?
Ancien pseudo : lolo

14

PHP5

[edit 1] tiens, marrant, sur un ftp free ça m'affiche plop aussi... je sais pas à quel niveau se situe la différence mais j'ai jamais modifié la config de php chez moi ^^
[edit 2] sur yN ça m'affiche bien "aaaa"; bon quoi qu'il en soit et en attendant d'avoir la réponse, cette méthode n'est pas fiable
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

15

ici (au boulot) PHP4

je testerais chez moi en PHP5
mais en tout cas, j'ai bien eu PLOP !
Ancien pseudo : lolo

16

http://cathodion.free.fr/test.php (Free, PHP4)
(Chez moi, PHP5)
mirari/test.php (yN, PHP5)

bon, j'ai pas la réponse officielle et j'ai la flemme d'aller la chercher, mais visiblement depuis PHP5 seules les références sont copiées et non pas les objets; la solution du ./6 ne serait donc pas fiable
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

17

woaw, c'est violent comme changement !!!!

ca peut changer completement la maniere de fonctionner d'un script !

bon, ben c'est bon à savoir ca, j'me coucherais moins con ce soir ! (est-ce vraiment possible, mystère...)
Ancien pseudo : lolo

18

Les implémentations de classe de PHP4 et PHP5 ne sont pas compatibles de toutes façons. Entre autres choses la sémantique d'assignation a été changée, par l'ajout du mot clef "clone". En PHP5, le comportement par défaut est une référence, et il faut utiliser clone pour créer une copie, alors qu'en PHP4, le comportement par défaut est une copie, et il faut utiliser l'opérateur & pour obtenir une référence.

En un sens, c'est vrai que j'aurais dû demander quelle version de php il utilisait avant de répondre.

19

bon en fait suffit de googliser pour en avoir le coeur net, c'est effectivement l'une des différences fondamentales entre PHP4 et PHP5.

http://www.journaldunet.com/developpeur/tutoriel/php/040902-php5-objet-1b.shtml
http://www.zdnet.fr/builder/architecture/programmation_objet/0,39021048,39131666,00.htm

=> faut réviser ton php, spectras tongue
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

20

ping, pong

happy
Ancien pseudo : lolo

21

Nan, je suis bien tombé, s'il utilisait PHP4 tongue
Mais sinon, il y a d'autres différences qui rendent les deux incompatibles. Un php4 avec des classes ne fonctionnera pas sur un moteur php5 et réciproquement.

22

Comme quoi, ne pas utiliser "l'objet" de php a du bon tongue

(de PHP3 a PHP4 sa a tout cassé et maintenant de PHP4 a PHP5 sa casse tout, bref tongue)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

23

spectras (./21) :
Nan, je suis bien tombé, s'il utilisait PHP4 tongue
Mais sinon, il y a d'autres différences qui rendent les deux incompatibles. Un php4 avec des classes ne fonctionnera pas sur un moteur php5 et réciproquement.

heu... pourquoi ??

j'ai pleins d'applis ecrites sous PHP4 qui ont marché nikel quand je suis passé au PHP5, et pourtant je en code quasi qu'avec des classes...
Ancien pseudo : lolo

24

a priori il manque "qui utilise certaines fonctionnalités" dans sa phrase; heureusement PHP4 et 5 ne sont pas totalement incompatibles, mais le problème qu'on vient d'évoquer montre bien qu'il faut faire gaffe.

(ceci dit, des changements de comportement aussi importants entre deux versions d'un langage, je trouve ça assez dangereux...)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

25

idem. Heureusement que j'ai toujours fait un FOR pour instancier un tableau de classe ! sinon je vous dis pas les dégats !
Ancien pseudo : lolo

26

Godzil (./23) :
16:01 - Godzil : Comme quoi, ne pas utiliser "l'objet" de php a du bon tongue.gif


Comme quoi ne pas utiliser php, ça a du bon grin

Au moins, avec perl, pas de secret : perl6 est une complète réécriture, et au pire on peut faire du perl5 avec un interpréteur perl6 smile
avatar
Il n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

27

Spipu> tu faisais quoi de tes classes ? Parce que si c'est juste des structures avec le mot "class", c'est pas de ça que je parle.
Entre autres changements :
=> la sémantique d'assignation n'est plus la même (fait très mal celui là)
=> l'héritage ne fonctionne plus de la même façon
=> $this a changé de nature, c'était une variable masquée mais standard, maintenant c'est une variable spéciale
=> les constructeurs ne fonctionnent plus du tout de la même façon
=> les fonctions d'introspection ne renvoient plus la même chose qu'avant (get_class et compagnie)
=> lorsqu'appelée depuis un objet, les fonctions statiques voient un $this correspondant au $this de l'objet appelant Oo

28

bah generalement c'est comme ca pour les langages... saufs ceux qui dependent vraiment des API genre Java qui fait aussi de la merde point de vue compatibilite avec differentes JVM...
et c'est vrai que sur ce point, les developpeurs de PHP ont vraiment faits les cons :/

29

Godzil (./22) :
(de PHP3 a PHP4 sa a tout cassé et maintenant de PHP4 a PHP5 sa casse tout, bref tongue)
Et de PHP5 à PHP6, j'ai cru comprendre que ça casserait tout aussi...
Mais j'espère que, pour PHP7, ils prendront la décision de vraiment tout casser et de repartir from scratch, et entre autres d'utiliser une bonne fois pour toute une seule et unique convention de nommage au lieu du bordel actuel qui oblige à passer plus de temps sur la doc PHP que sur le code mad...
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

30

Ethaniel (./29) :
utiliser une bonne fois pour toute une seule et unique convention de nommage au lieu du bordel actuel


idem !

qu'est-ce que c'est chiant ce manque de normalisation !!!
Ancien pseudo : lolo