Résolu - Signification de cette ligne ?

Résolu - Signification de cette ligne ? - PHP - Programmation

Marsh Posté le 29-11-2006 à 09:50:46    

Dans un programme, j'ai trouvé cette instruction que j'ai quelques difficultés à interpréter :
 
$nbrparts = !$struct->parts ? "1" : count($struct->parts);
 
A vue de nez, je dirais que $struct est composé de divers éléments, dont une variable nommée parts qui peut prendre différentes valeurs (1, 2, 3,...). S'agit-il de compter le nombre de fois dans $struct où parts est différent de 1 ?
La syntaxe de cette commande m'échappe : -> ? :


Message édité par Kiosquec le 29-11-2006 à 13:58:18
Reply

Marsh Posté le 29-11-2006 à 09:50:46   

Reply

Marsh Posté le 29-11-2006 à 10:13:12    

opérateur ternaire
 
A?B:C
 
si A, alors B sinon C

Reply

Marsh Posté le 29-11-2006 à 10:16:04    

theshockwave a écrit :

opérateur ternaire

 

A?B:C

 

si A==vrai, alors B sinon C

 

[:aloy]
(on sait jamais, il ne pourrait pas comprendre)


Message édité par gatsu35 le 29-11-2006 à 10:16:24
Reply

Marsh Posté le 29-11-2006 à 10:39:05    

S'il n'y a pas de variable parts alors $nbparts = 1 sinon je compte le nombre de variables parts.
 
Il s'agit de savoir si un mail est composé d'une ou de plusieurs parties.
J'ai vu que la syntaxe -> a un rapport avec les fonctions. il ne me reste plus qu'à trouver de quelle fonction est parachuté $struct.
 
Dans le programme, il y a une variable $entetes :
$entetes = imap_header($mail_cnx, $id);
 
Elle permet d'afficher des éléments prédéfinis, comme subject, fromaddress, toaddress, ccaddress, date, etc.
Exemple :
<?php echo $entetes->from[0]->personal."  &lt;".$entetes->from[0]->mailbox."@".$entetes->from[0]->host."&gt;";?>
 
$struct, c'est visiblement fait pour voir la structure du mail.
On a dans le programme $struct->type et $struct->parts, mais $struct vient de quelle fonction ? De imap_header() ? Dans ce cas, pourquoi le programme n'indique-t-il pas quelque chose du genre :
$struct = imap_header($mail_cnx, $id);
(Ca a l'air de venir de imap_fetchstructure(). C'est énervant ces tutoriels qui font l'impasse sur des bouts de programmes indispensables !)


Message édité par Kiosquec le 29-11-2006 à 10:52:45
Reply

Marsh Posté le 29-11-2006 à 12:10:06    

La syntaxe  "->" c'est en rapport avec l'orienté objet et les classes.

 

Traduction du code que tu linkes donc :

 
Code :
  1. if (isset($struct->parts))
  2. { $nbrparts = count($struct->parts);
  3. }
  4. else
  5. { $nbrparts = 1;
  6. }
 

Le "parts" ne peut pas je pense être testé sur "true" ou "false" puisque s'il y a un count c'est qu'on s'attend à ce que la variable soit numérique ...
ce qui me fait penser qu'ici le "if ($struct->parts)" c'est similaire à un "if (isset($struct->parts))" ou équivalent ... à voir...

 

*Edit* mouais dans le code original c'est avec un "!" , dans ce cas l'auteur aurait clairement mis !isset(...)" ... pourquoi peut-on faire un test booléen sur une variable qui peut également être counted ?

Message cité 1 fois
Message édité par ZeBix le 29-11-2006 à 12:12:51
Reply

Marsh Posté le 29-11-2006 à 13:57:54    

ZeBix a écrit :

La syntaxe  "->" c'est en rapport avec l'orienté objet et les classes.
 
Traduction du code que tu linkes donc :
 

Code :
  1. if (isset($struct->parts))
  2. { $nbrparts = count($struct->parts);
  3. }
  4. else
  5. { $nbrparts = 1;
  6. }


 
Le "parts" ne peut pas je pense être testé sur "true" ou "false" puisque s'il y a un count c'est qu'on s'attend à ce que la variable soit numérique ...  
ce qui me fait penser qu'ici le "if ($struct->parts)" c'est similaire à un "if (isset($struct->parts))" ou équivalent ... à voir...
 
*Edit* mouais dans le code original c'est avec un "!" , dans ce cas l'auteur aurait clairement mis !isset(...)" ... pourquoi peut-on faire un test booléen sur une variable qui peut également être counted ?


C'est plus clair ainsi, mais l'exemple initial fonctionne. Apparemment, "parts" peut ne pas exister si le mail est en une seule partie.
 
La fonction à utiliser est bien imap_fetchstructure($mail_cnx, $id)
Je peux désormais tester la présence d'un ou de plusieurs fichiers joints.
Je teste $part->subtype == "PLAIN" pour détecter un fichier texte joint au mèl. Son nom est $param->value si en posant $param = $part->parameters[$i] j'ai bien $param->attribute == "name"
 
En bref, mon problème avance, il ne me reste plus qu'à récupérer le contenu des fichiers textes joints (peut-être des questions ultérieures si mon tutorial a fait d'autres impasses).
Ca passait par la compréhension de A?C:C

Reply

Sujets relatifs:

Leave a Replay

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