phpbar.de logo

Mailinglisten-Archive

[php] imap-Programmierung

[php] imap-Programmierung

mzobel at gmx.de mzobel at gmx.de
Don Nov 3 11:38:13 CET 2005


Hallo,

dieses Resultat ist interessant und irgendwie nicht sehr offensichtlich.

In der Liste der Rangfolge werden beide "nur" mit links angegeben

http://www.php.net/manual/de/language.operators.php

links     ||


links     or


http://www.php.net/manual/de/language.operators.logical.php

**
$a or $b     Oder     *TRUE* wenn $a oder $b *TRUE* ist.


$a || $b     Oder     *TRUE* wenn $a oder $b *TRUE* ist.


Der einzige Hinweis dafür ist der folgende:

Der Grund dafür, dass es je zwei unterschiedliche Operatoren für die "Und"-
und die "Oder"-Verknüpfung gibt ist der, dass die beiden Operatoren jeweils
Rangfolgen haben. (siehe auch Operator-Rangfolge
<language.operators.php#language.operators.precedence>.)

Meine Frage wäre nun:

Ist die Dokumentation unvollständig oder aus welchem Teil der Dokumentation
kann ich diese Information entnehmen?

*Tabelle 15-1. Operator-Rangfolge scheint mir nicht aussagekräftig genug
oder ich lese die Tabelle falsch.
*

p.s. sorry wenn die mail eventuell nicht im thread landet...

Vielen Dank im Voraus,
Michel

> Das Problem ist das || nach dem imap_open. Entsprechend der
Operator-Reihenfolge[1] wird zunächst || und dann = ausgewertet. d.h. das
Ergebnis von imap_open (in diesem Fall eine Resource) wird genommen. Der ||
Operator sieht, dass der, nach cast zu bool, true ist und wertet die(...)
nichtmehr aus. Der Rückgabewert dieser Boolschen-Operation (true) wird dann
durch das = an $mbox zugewiesen. echo macht dann ein Cast zu einem String,
somit wird aus true ein String "1".
>
> Was du willst ist "or" statt "||". Da hat dann "=" Vorrang vor dem "or".
>
> $mbox = imap_open ("{localhost:143 /imap/tls/novalidate-cert}", "cyrus",
"PASSWORT", OP_HALFOPEN) OR die ("can't connect: ".imap_last_error());
>
> da wird zunächst imap_open ausgeführt, das ergibt Resource, dann die
Zuweisung ausgeführt, also $mbox bekommt die Resource, das "Ergebnis" einer
Zuweisung ist der zugewiesene Wert also Resource, damit wird "or"
ausgewertet, dass ist true somit wird das die() auch nichtmehr ausgewertet.
>
> johannes
>
> [1] http://php.net/operators
>  
>

-- 
Highspeed-Freiheit. Bei GMX supergünstig, z.B. GMX DSL_Cityflat,
DSL-Flatrate für nur 4,99 Euro/Monat*  http://www.gmx.net/de/go/dsl

php::bar PHP Wiki   -   Listenarchive