Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
515 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Résolu - Signification de cette ligne ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Résolu - Signification de cette ligne ?

n°1483510
Kiosquec
Posté le 29-11-2006 à 09:50:46  profilanswer
 

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
mood
Publicité
Posté le 29-11-2006 à 09:50:46  profilanswer
 

n°1483529
theshockwa​ve
I work at a firm named Koslow
Posté le 29-11-2006 à 10:13:12  profilanswer
 

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

n°1483537
gatsu35
Blablaté par Harko
Posté le 29-11-2006 à 10:16:04  profilanswer
 

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
n°1483559
Kiosquec
Posté le 29-11-2006 à 10:39:05  profilanswer
 

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
n°1483659
ZeBix
edit &gt; preview
Posté le 29-11-2006 à 12:10:06  profilanswer
 

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
n°1483718
Kiosquec
Posté le 29-11-2006 à 13:57:54  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Résolu - Signification de cette ligne ?

 

Sujets relatifs
[PHP/MySql] [Resolu merci !]Insertion de données temporaire.[VBA - Excel] - RESOLU - Erreur de focus sur fonction "simple"
[Résolu] Invalidate -> éviter le clignottement[ RESOLU ] Probleme avec les sessions de chez free
Tester le code IE6 quand on est sous IE7? [résolu!][Résolu]Probleme d'affichage des info contenu dans la base de données
Afficher un point ou une lignesymbole non resolu au link d'une dll
[RESOLU]Mettre à jour eclipse[Résolu] Sécurité d'une variable de session
Plus de sujets relatifs à : Résolu - Signification de cette ligne ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR