2012-07-19 20 views
6

Ist dieses Verhalten in PHP korrekt?PHP Typ Casting Vorrang

<?php echo '-' . 1 + 1 . ' crazy cats'; ?> 
// Outputs: 
0 crazy cats 

verstehe ich, dass minus zu den ersten ‚1‘ verkettet wird, und ‚-1‘ auf ganzzahlige gegossen, und nicht ‚2‘ zu bespannen.

Bitte erklären Sie, warum.

Was ist der beste Weg, um es zu lösen? Dieser?

<?php echo '-' . (string)1 + 1 . ' crazy cats'; ?> 
+0

erstaunt dies kein Betrogene ist .. so +1 – Louis

Antwort

1

Wenn Sie es vorziehen, vermeidet dies Vorrang:

printf('-%d crazy cats',1+1); 
6

Zunächst einmal ist es richtig, und wenn es anders wäre, wäre es auch richtig sein, das ist, wie PHP-Entwickler Operand Vorrang definiert.
In diesem Szenario kein Operand Vorrang hat, so u

  1. '-' . 1 ==> '-1'
  2. '-1' + 1 ==> 0 nach rechts lesen Sie es nach links (arithmetischen Operationen auf Strings, wird versuchen, sie zu Zahlen zu werfen und dann tun, um die Arithmetik).
  3. 0 . ' crazy cats' ==> "0 crazy cats" (Zeichenfolgen Operationen auf Zahlen, werden sie in Strings umgewandelt).
+2

Argh, du warst schneller als ich :) BTW, Operator Vorrang ist verfügbar unter: http: // php.net/manual/en/language.operators.precedence.php. –

1

Ihr Wort ist aus. Die '-' wird nicht gegossen, sondern zusammengefügt.

PHP behandelt immer noch (string) 1 und -1 als eine ganze Zahl.

. und +/- haben in PHP die gleiche Priorität, so dass die Zeichenfolge von links nach rechts gelesen werden kann.

Die oben ist ähnlich sagen:

echo '-1' + '1 crazy cats'; 
+0

Minus ist natürlich nicht casted, korrigiert die Frage. – Paker

4

Wenn Sie -2 verrückt Katzen, können Sie die Priorität mit Klammern manipulieren einstellen:

echo '-' . (1 + 1) . ' crazy cats'; 
3

echo folgt auch das Konstrukt von echo 'foo', 'bar' die trennt die Elemente in unterschiedliche Anweisungen zum Echo. Sie müssen sich in diesem Fall keine Gedanken über die Verknüpfungsreihenfolge machen.

So könnten Sie <?php echo '-', (1 + 1), ' crazy cats'; ?> tun und Ihre Katzen würden sich nicht um Negative kümmern!