2010-12-11 7 views
2

Pourquoi "/" . date("Y") + 1 dans PHP retourne 1? Et une question similaire, pourquoi date("Y") . "/" . date("Y") + 1 retourner 2011?Pourquoi "/". date ("Y") + 1 dans le retour PHP 1?

Je quessing qu'il a quelque chose à voir avec la priorité des opérateurs, car date("Y") . "/" . (date("Y") + 1) ne retourne l'attend "2010/2011"

Répondre

9

Yep. . plus étroitement que se fixe +, donc:

"/" . date("Y") + 1 

est analysé comme:

("/" . date("Y")) + 1 

Le côté gauche ne démarre pas avec des chiffres, donc quand vous le convertir en un certain nombre, il devient 0 . même chose avec celui-ci:

(date("Y") . "/" . date("Y")) + 1 

le côté gauche du + commence avec 2010 alors certains chiffres non, donc quand il est converti en un nombre, i t devient 2010. Ensuite, vous ajoutez 1.

+1

Voir également http://www.php.net/manual/fr/language.types.string.php#language. types.string.conversion – Matthew

+0

Ok, le typage faible de PHP m'a vraiment attiré ici. Je n'ai pas deviné que "/". date ("Y") évaluerait à 0. Je pensais que le résultat serait une chaîne là. Rusé. – Johan

+0

@konforce Eh bien, oui. Pas sûr que j'aime le comportement de PHP dans ce cas. J'aime le typage dynamique, mais je ne suis pas aussi sûr de la partie typage faible. C'est un peu faible parfois ...;) – Johan

-1

lorsque vous utilisez le point. Cela veut dire qu'une chaîne de caractères et après cela vous essayez de + cette chaîne avec un entier, ce n'est pas logique.

+0

PHP convertit automatiquement les chaînes en entiers. – luqui

+0

@luqui, et si la chaîne n'a pas commencé par un chiffre est convertie en 0 – m0unir

+0

Ok? Je n'ai vraiment pas cette réponse ... Je l'abaisserais si je le pouvais. – Johan