[PHP] Exploiter le premier elt d'un array retourné par une fonction?

Exploiter le premier elt d'un array retourné par une fonction? [PHP] - PHP - Programmation

Marsh Posté le 12-10-2006 à 15:09:40    

Salut,
 
Je viens de tomber sur un os en PHP, et une opération qui m'aurait semblé totalement légale dans un autre langage me retourne un parse error.
 
En fait, je vpoulais savoir s'il était possible d'extraire la première valeur d'un table retoruné par une fonction sans passer par un tableau intermédiaire...
 
Un exemple valant mieux qu'un long discours...:
 

print array_keys($tabledata)[0];


 
Pourquoi l'exemple précédent ne fonctionne t il pas? J'ai beau essayer d'isoler le retour de ma fonction avec des parenthèses, ça ne fonctionne toujours pas... Suis je obligé de passer par un tableau temporaire?
 
Ou alors par un truc dugenre:
 

list($val) = array_keys($tabledata);
print $val;

Reply

Marsh Posté le 12-10-2006 à 15:09:40   

Reply

Marsh Posté le 12-10-2006 à 15:16:38    

Parce-que.[:dawao]
 
(en gros non, tu ne peux pas utiliser directement le résultat d'une fonction, il faut le mettre dans une variable.:o)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-10-2006 à 15:54:59    

Code :
  1. print array_shift(array_keys($table));


Reply

Marsh Posté le 12-10-2006 à 21:12:19    

Et encore, y'a pas longtemps on pouvait pas faire :

$pouet->bidule->machin->truc();


Maintenant on peut [:dawa]

Reply

Marsh Posté le 12-10-2006 à 21:22:35    

FlorentG a écrit :

Et encore, y'a pas longtemps on pouvait pas faire :

$pouet->bidule->machin->truc();


Maintenant on peut [:dawa]


PHP sa simplicité en a fait sa popularité, mais aussi un langage tout pourri
Défaut simple, ya pas vraiment de terme d'objet
pour une string tu peux pas faire :  
$mastring->methodedelobjet() :(
tu doit faire :  
fonctionsurlastring($lastring); :(
 
au fait pourquoi en PHP c'est -> et pas . ?
peut etre parce que . est déjà utilisé pour la concaténation de chaînes ?

Message cité 2 fois
Message édité par gatsu35 le 12-10-2006 à 21:24:08
Reply

Marsh Posté le 12-10-2006 à 21:52:49    

gatsu35 a écrit :

peut etre parce que . est déjà utilisé pour la concaténation de chaînes ?


Jamais compris pourquoi c'était pas + :/

Reply

Marsh Posté le 12-10-2006 à 22:03:17    

gatsu35 a écrit :

peut etre parce que . est déjà utilisé pour la concaténation de chaînes ?


En même temps ça n'a pas grande importance, ce n'est qu'une convention ça, et tous les langages ne l'utilisent pas (Smalltalk utilise un simple espace pour signifier l'envoi d'un message à un objet)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-10-2006 à 00:40:53    

gooopil a écrit :

Jamais compris pourquoi c'était pas + :/


Je peux pas blairer les langage où c'est '+', parce que dès que tu fous une addition dedans c'est le bordel [:dawak]
 
Genre JS :

var pouet = 'tagada ' + 2 + 3;


HAHA WHAT'S GOING ON
tagada 23 ? tagada 5 ? Quel est le plus logique ? Rajouter des parenthèses pour forcer l'addition, et rajouter plein de caractère qui font chier en même temps ? [:dawak]
Je préfère :

$pouet = 'tagada ' . 2 + 3;


ou

Dim Pouet As Integer = 'tagada ' & 2 + 3


 
Bon ok, c'est minime... Maintenant j'aime bien quand on mélange pas les choses, mieux vaut laisser les opérateurs mathématiques pour les maths

Message cité 2 fois
Message édité par FlorentG le 13-10-2006 à 00:41:12
Reply

Marsh Posté le 13-10-2006 à 00:48:15    

FlorentG a écrit :

Je peux pas blairer les langage où c'est '+', parce que dès que tu fous une addition dedans c'est le bordel [:dawak]


Quand le langage est fortement typé ya aucun problème nulle part [:dawa]
 
Python:

Code :
  1. >>> "tagada" + 2 + 3
  2.  
  3. Traceback (most recent call last):
  4.  File "<pyshell#0>", line 1, in -toplevel-
  5.    "tagada" + 2 + 3
  6. TypeError: cannot concatenate 'str' and 'int' objects
  7. >>>


Ruby

Code :
  1. >> 'tagada' + 2 + 3
  2. TypeError: can't convert Fixnum into String
  3.        from (irb):1:in `+'
  4.        from (irb):1


Haskell/GHCi

Code :
  1. Prelude> "tagada" + 2 + 3
  2. <interactive>:1:13:
  3.    No instance for (Num [Char])
  4.      arising from use of `+' at <interactive>:1:13
  5.    Probable fix: add an instance declaration for (Num [Char])
  6.    In the definition of `it': it = ("tagada" + 2) + 3


Erlang

Code :
  1. 3> "tagada" + 2 + 3.
  2. =ERROR REPORT==== 13-Oct-2006::01:04:06 ===
  3. Error in process <0.34.0> with exit value: {badarith,[{erl_eval,eval_op,3},{erl_
  4. eval,expr,5},{shell,exprs,6},{shell,eval_loop,3}]}
  5. ** exited: {badarith,[{erl_eval,eval_op,3},
  6.                      {erl_eval,expr,5},
  7.                      {shell,exprs,6},
  8.                      {shell,eval_loop,3}]} **


Common Lisp / clisp

Code :
  1. [3] (+ "tralala" 2 3)
  2.  
  3. *** - +: "tralala" is not a number
  4. The following restarts are available:
  5. USE-VALUE      :R1      You may input a value to be used instead.
  6. ABORT          :R2      ABORT


Scheme / Petite Chez Scheme

Code :
  1. - (+ "tralala" 2 3)
  2.  
  3. [Repl(15)] Error in +: "tralala" is not a number.
  4. Type (debug) to enter the debugger.


 
Tu veux jouer avec des langages de merde, c'est ton problème hein, c'est pas comme s'il n'y avait pas d'alternatives [:dawa]

Message cité 2 fois
Message édité par masklinn le 13-10-2006 à 00:55:02
Reply

Marsh Posté le 13-10-2006 à 08:21:17    


 


 
Si je résume : le choix de . dans php pour la concaténation est logique, pour éviter des confusions, à cause de la confusion de php lui même au niveau du typage...Chais chuper php  
[:al_bubu]

Message cité 2 fois
Message édité par gooopil le 13-10-2006 à 08:21:34
Reply

Marsh Posté le 13-10-2006 à 08:21:17   

Reply

Marsh Posté le 13-10-2006 à 12:14:44    

masklinn a écrit :

Ruby

Code :
  1. >> 'tagada' + 2 + 3
  2. TypeError: can't convert Fixnum into String
  3.        from (irb):1:in `+'
  4.        from (irb):1




Ah ouais ok [:dawak] En voilà quelque chose de bien

Reply

Marsh Posté le 13-10-2006 à 12:16:50    

gooopil a écrit :

Si je résume : le choix de . dans php pour la concaténation est logique, pour éviter des confusions, à cause de la confusion de php lui même au niveau du typage...Chais chuper php  
[:al_bubu]


Je dirais plutôt que comme + est déjà utilisé, il ont pris .
 
Quand tu vois les discussions sur l'implémentation des namespaces dans PHP6, ils cherchaient un symbole pour séparer les trucs. Alors normalement c'est du genre system.machin.truc, sauf qu'ils pouvaient pas faire comme ça parce que . est l'opérateur de concaténation [:dawa]. Ils pensaient aussi utiliser ::, mais pas de bol c'est pour appeller une fonction statique sur un objet. Bref, je sais pas ce qu'ils foutent, mais on dirait qu'écrire un parser qui sait différencier un opérateur suivant le contexte est au-dessus de leur moyen

Reply

Marsh Posté le 13-10-2006 à 12:18:38    

gooopil a écrit :

Si je résume : le choix de . dans php pour la concaténation est logique, pour éviter des confusions, à cause de la confusion de php lui même au niveau du typage...Chais chuper php  
[:al_bubu]


moi j'aurais plutôt dit que c'était "hérité" de perl

Reply

Marsh Posté le 13-10-2006 à 12:19:25    

FlorentG a écrit :

Ah ouais ok [:dawak] En voilà quelque chose de bien


J'vois pas ce que tu veux d'autre qu'une TypeError dans ce genre de cas hein [:dawa]

FlorentG a écrit :

on dirait qu'écrire un parser qui sait différencier un opérateur suivant le contexte est au-dessus de leur moyen


C'est censé être étonnant de leur part ça [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-10-2006 à 12:21:14    

masklinn a écrit :

J'vois pas ce que tu veux d'autre qu'une TypeError dans ce genre de cas hein [:dawa]


Do it the PHP way, convertit en string et tente quelque chose de manière à ce que le n00b de base ait le résultat voulu.
 
 
Nan y'a mieux, convertit la string en 0, et fait l'addition [:dawa]

Reply

Marsh Posté le 13-10-2006 à 12:25:43    

masklinn a écrit :

C'est censé être étonnant de leur part ça [:petrus dei]


Selon les premières meeting notes, la discussion a fini sur :

Citation :

The suggested separator is "\" as this is the only free choice.


 [:johneh]

Reply

Marsh Posté le 13-10-2006 à 12:26:39    

FlorentG a écrit :

Selon les premières meeting notes, la discussion a fini sur :

Citation :

The suggested separator is "\" as this is the only free choice.


 [:johneh]


yeah, je sens venir les trucs marrants...[:dawa]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-10-2006 à 12:27:03    

FlorentG a écrit :

Do it the PHP way, convertit en string et tente quelque chose de manière à ce que le n00b de base ait le résultat voulu.
 
 
Nan y'a mieux, convertit la string en 0, et fait l'addition [:dawa]


Code :
  1. >> "tagada #{2+3}"
  2. => "tagada 5"


[:dawak]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-10-2006 à 12:35:09    

Small test :

<?php
 
$str = 'machin ' . 2 + 3;
echo $str;


Affiche '3'.... Il concatène machin et 2. Puis pour additionner il convertit la première en 0, et ajoute 3. Faut mettre logiquement des parenthèses
 
si maintenant on a ça :

<?php
 
$str = '1 machin ' . 2 + 3;
echo $str;


Ca retourne '4'. De nouveau concaténation, puis pour l'addition, il convertit en 1 (en fait il stop au premier caractère non-numérique pour la conversion en int).
 
 
Faut juste le savoir [:dawak]

Reply

Marsh Posté le 13-10-2006 à 12:44:47    

FlorentG a écrit :

Selon les premières meeting notes, la discussion a fini sur :

Citation :

The suggested separator is "\" as this is the only free choice.


 [:johneh]


[:rofl]

FlorentG a écrit :

Small test :

<?php
 
$str = 'machin ' . 2 + 3;
echo $str;


Affiche '3'.... Il concatène machin et 2. Puis pour additionner il convertit la première en 0, et ajoute 3. Faut mettre logiquement des parenthèses
 
si maintenant on a ça :

<?php
 
$str = '1 machin ' . 2 + 3;
echo $str;


Ca retourne '4'. De nouveau concaténation, puis pour l'addition, il convertit en 1 (en fait il stop au premier caractère non-numérique pour la conversion en int).
 
 
Faut juste le savoir [:dawak]


Small test:

Code :
  1. >>> 'machin' + 2 + 3
  2.  
  3. Traceback (most recent call last):
  4.  File "<pyshell#0>", line 1, in -toplevel-
  5.    'machin' + 2 + 3
  6. TypeError: cannot concatenate 'str' and 'int' objects
  7. >>> '1 machin' + 2 + 3
  8.  
  9. Traceback (most recent call last):
  10.  File "<pyshell#1>", line 1, in -toplevel-
  11.    '1 machin' + 2 + 3
  12. TypeError: cannot concatenate 'str' and 'int' objects
  13. >>> int("machin" ) + 2 + 3
  14.  
  15. Traceback (most recent call last):
  16.  File "<pyshell#2>", line 1, in -toplevel-
  17.    int("machin" ) + 2 + 3
  18. ValueError: invalid literal for int(): machin
  19. >>> int("1 machin" ) + 2 + 3
  20.  
  21. Traceback (most recent call last):
  22.  File "<pyshell#3>", line 1, in -toplevel-
  23.    int("1 machin" ) + 2 + 3
  24. ValueError: invalid literal for int(): 1 machin
  25. >>> "machin" + str(2+3)
  26. 'machin5'
  27. >>> "1 machin" + str(2+3)
  28. '1 machin5'


C'est cohérent, tu peux pas faire de connerie, ça essaie de faire exactement ce que tu demandes et pas autre chose, pas besoin de devoir se souvenir de règles stupides [:dawak]

Message cité 1 fois
Message édité par masklinn le 13-10-2006 à 12:45:05

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-10-2006 à 12:46:42    

FlorentG a écrit :

Small test :

<?php
 
$str = 'machin ' . 2 + 3;
echo $str;


Affiche '3'.... Il concatène machin et 2. Puis pour additionner il convertit la première en 0, et ajoute 3. Faut mettre logiquement des parenthèses
 
si maintenant on a ça :

<?php
 
$str = '1 machin ' . 2 + 3;
echo $str;


Ca retourne '4'. De nouveau concaténation, puis pour l'addition, il convertit en 1 (en fait il stop au premier caractère non-numérique pour la conversion en int).
 
 
Faut juste le savoir [:dawak]


 
'tain mais vive php, quoi! [:marc]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-10-2006 à 12:50:28    

masklinn a écrit :

C'est cohérent, tu peux pas faire de connerie, ça essaie de faire exactement ce que tu demandes et pas autre chose, pas besoin de devoir se souvenir de règles stupides [:dawak]


Clairement. Si y'avait moyen sous PHP d'éviter l'automatisation à outrance

Reply

Marsh Posté le 13-10-2006 à 12:52:02    

FlorentG a écrit :

Clairement. Si y'avait moyen sous PHP d'éviter l'automatisation à outrance


ajouter la notion de types de données?[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-10-2006 à 12:59:24    

skeye a écrit :

ajouter la notion de types de données?[:joce]


Ca commence à venir tout tout doucement. Déjà dans les fonctions, tu peux forcer le type d'un paramètre (mais seulement un objet ou un Array, pas de type de base genre int ou string). Ensuite il est question aussi pour PHP6 de permettre de forcer le type de retour... Ca vient, ça vient

Reply

Marsh Posté le 13-10-2006 à 13:10:55    

FlorentG a écrit :

Ca commence à venir tout tout doucement. Déjà dans les fonctions, tu peux forcer le type d'un paramètre (mais seulement un objet ou un Array, pas de type de base genre int ou string). Ensuite il est question aussi pour PHP6 de permettre de forcer le type de retour... Ca vient, ça vient


Ouais enfin je viens de lire les dernières devnotes, et PHP va continuer à être une grosse blague, je vois vraiment pas l'intérêt de continuer à l'utiliser [:pingouino]
 
Leurs références permanentes à "PHP's KISS principle" me font exploser de rire, aussi [:dawa]

Message cité 1 fois
Message édité par masklinn le 13-10-2006 à 13:11:29

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-10-2006 à 13:13:51    

masklinn a écrit :

Ouais enfin je viens de lire les dernières devnotes, et PHP va continuer à être une grosse blague, je vois vraiment pas l'intérêt de continuer à l'utiliser [:pingouino]


Gratos et proposé partout. J'ai commencé le dev web avec ça, tous nos premiers hébergements en mutualisé (OVH) ne proposaient que PHP...
 
OVH commence à tester RoR, et devrait le proposer à terme. Maintenant on a un dédié, je pourrait le foutre dessus, mais ça veut dire tout recommencer, se reformer et tout. Donc pas avant quelques temps...
 
Pour l'instant sous PHP5 ça va encore, y'a moyen de faire quelque chose, à condition de bien faire gaffe. Grâce aux tests unitaires les erreurs de bases sont évitées, et j'arrive à m'en tirer sans que PHP soit trop pénalisant et limitant.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed