Résolu - Signification de cette ligne ? - PHP - Programmation
Marsh Posté le 29-11-2006 à 10:13:12
ReplyMarsh Posté le 29-11-2006 à 10:16:04
theshockwave a écrit : opérateur ternaire A?B:C si A==vrai, alors B sinon C |
(on sait jamais, il ne pourrait pas comprendre)
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." <".$entetes->from[0]->mailbox."@".$entetes->from[0]->host.">";?>
$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 !)
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 :
|
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 ?
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.
|
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
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