Aller au contenu

Instruction bizarement construite


Sujets conseillés

Posté

Bonjour,

Dans un script que j'ai trouvé sur le net, il y a des contructions de condition que je ne comprends pas, et que je n'ai jamais vu ailleurs :

  if($parent_url{strlen($parent_url)-1} == '/')
{
// instructions...
}

Ce que je ne comprends pas, c'est la partie {strlen($parent_url)-1}. Pas le strlen et tout le fourbi, ça pas de problème, mais que viennent faire des '{' associée à une varible ($parent_url) ? Je n'ai jamais vu ça ailleurs...

Si un super pro de ce forum pouvait m'apporter la lumière, qu'il en soit béni :D

Posté

Les accolades (curly braces) ont été héritées de Perl. Il vaut mieux utiliser les crochets (square brackets)

C'est équivalent à

if($parent_url[strlen($parent_url)-1] == '/')

donc teste le dernier caractère de la chaîne $parent_url et le compare à '/'

Mais cela sera obsolète et ne fonctionnera plus en php6. Cela ne fonctionne plus depuis Php 5.1 en mode E_STRICT.

Une explication en Anglais à cette page: http://www.php.net/~derick/meeting-notes.html#cleanup-for-vs

Posté

Ok, donc sur le 353797 en php5.25, je l'ai dans l'os, c'est ça ? :)

Je vais trouver un equivalnet de l'instruction, donc.

Merci Dan.

Posté (modifié)

Par contre, je comprend vraiment pas cette instruction (la tienne Dan), $parent_url n'est pas un tableau, comment se fait il qu'on puisse utiliser des [] en dehors d'un tableau ?

De même, j'ai aussi cette instruction : $link['url']{0}. Si je comprends bien, c'est equivalent à $link['url'][0]. Mais là aussi, $link, c'est un tableau à une dimension, pas 2. Donc on ne devrait pas pouvoir acceder au [0].

ça devient compliqué pour moi, ça :(

Modifié par lorik
Posté

Heu, ça veut dire qu'on peut acceder au xeme caractère d'une chaine $chaine avec $chaine[x] ?

bah ça, ça m'en bouche un coin, avec tout ce que j'ai vboufé comme bouquin,s PHP, j'ai jamais vu une ligne là dessus, et je me suis toujours fait C... pour acceder à ce type de données.

c'est bien ça ? C'est du php quelle version, ça ? j'ai bouffé du PHP4, mais rien d'autre...

Posté

Si $toto vaut "abcdef" .... $toto[3] vaut 'd' (on commence à $toto[0] jusque $toto[strlen($toto)-1] )

Comme strlen($toto) vaut 6 parce que la chaîne fait 6 caractères, $toto[strlen($toto)-1] est donc $toto[5], donc 'f' (le dernier caractère).

Comme le dit justement Nicolas, une chaîne de caractères est en fait un tableau de caractères (allant de 0 à longueur -1).

C'est du php "toutes versions confondues" :P

Posté

Dans ton cas $link est un tableau qui contient des chaines de caractères. C'est donc bien un tableau à 2 dimensions.

$link['url'][0] == Au 1er caractère de la chaine de caractères correspondant à la ligne "url" du tableau "link"

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...