2009-07-18 2 views
1

So eine VBA-Anwendung auf PHP Ich bin Portierung und lief in diesen wunderbaren, kleinen Nugget Code:Was bedeutet das? expr1 = expr2 Mod expr3 = 0

expr1 = expr2 Mod expr3 = 0 

Ich dachte, es wie ein ternärer Operator benahm, aber wenn ich es brach Zu einfachen wenn dann Aussagen war das Ergebnis nicht wie erwartet. Also frage ich den brillanten Stack Überlauf Community, um mir zu helfen und es in leicht verständliche Begriffe zu bringen. Ich weiß, wenn ich mir die anderen Antworten ansehe, werde ich nicht im Stich gelassen. [/ Ende brown_nose>]

+0

Bad bad Code :) bei Ausdruck der Suche, mein Geist übernimmt sofort, dass dies ein Vergleich in einer if/while usw. Aussage . Kombiniert mit mangelnder Gruppierung und VB assigment = Vergleichsoperator und dynamische Typumwandlung, hehe. Wenn Sie mit der Vorrangstellung des Operators nicht vertraut sind, ist es sehr einfach, das als (expr1 == expr2)% (expr3 == 0) ... zu lesen, was leicht zu einer Division durch Null führen kann. Sehr schlecht :) –

Antwort

5

Es ist der Modulo-Operator:

a MOD b = remainder of a/b 

in PHP ist es das% -Zeichen:

a%b 

see php documentation here

So ist die Linie

expr1 = expr2 Mod expr3 = 0 

bedeutet: Ausdruck1 i ist wahr, wenn ausdr2 durch expr3 ohne Reste unterteilt werden können: zB:

20 MOD 5 = 0 ==> TRUE 
22 MOD 5 = 2 ==> FALSE 
+0

aber wofür wird das = 0 am Ende benutzt? – txmail

+0

Wow schwierig, die Antwort zuzuweisen, ich wähle Peter, da er mit einer besseren Erklärung zurückschrieb (obwohl ich Jacob während des Eintreffens fast das Gleiche fragte. Sie beide rocken. Danke! – txmail

8

Es Expr1 auf einen booleschen Wert zuweisen, ob ausdr2 anzeigt gleichmäßig geteilt werden kann (ohne Rest) durch expr3. Denken Sie daran, dass = bedeutet == in VB: D.

Hier ist, wie es mit den impliziten Klammern aussehen:

expr1 = ((expr2 Mod expr3) = 0) 
+1

Warum sollte der = Operator richtig sein -associate? Ich würde irgendwie erwarten, dass "a = b = c" als "(a = b) = c" assoziiert. –

+0

So ist es richtig, so zu denken: Verwenden Sie Ihr Beispiel if: expr2 = 2 expr3 = 4 expr1 wäre wahr (1)? – txmail

+0

Vielleicht war meine Formulierung rückwärts, aber nein. Der Rest von 2/4 ist 2, also würde das zu False auswerten. Aber wenn expr2 4 ist und expr3 2 ist, dann würde es evaluate to True. – Jacob