2012-05-06 16 views

Respuesta

7

PHP no es C, por lo que 'a' + 1 no es 'b'.

'a' en un contexto numérico es 0, y 0+1 = 1.

php> echo (int)'a'; 
0 

El hecho de que los operadores de incremento de sufijo/prefijo hacer el trabajo como si fuera un char C parece ser una "característica" repugnante de PHP. Especialmente dado que los operadores de decremento no funcionan en este caso.

Cuando incrementa 'z' se pone aún peor:

php> $a = 'z'; 
php> echo ++$a 
aa 
+0

¿A qué te refieres con? : "Especialmente porque los operadores de decremento no funcionan en este caso". – Shubham

+1

En realidad, yo no lo llamaría necesariamente necesariamente. Esencialmente sigue reglas matemáticas estándar usando una base de 25 (con letras en vez de números). – Mario

+0

@Shubham "No-op" significa "sin operación", es decir, no sucede nada. Se explica aquí justo antes del primer ejemplo: http://php.net/manual/en/language.operators.increment.php – Mario

1

La razón es PHP el tratamiento de las variables de una manera específica de contexto. Es un poco similar a Visual Basic.

La expresión 'a' + 1 utiliza la adición matemática. En este contexto, a se interpreta como un número, por lo que se considerará 0 (si está familiarizado con C, es como alimentar la cadena "a" en atoi()).

Si utiliza la expresión 'a' . 1, el resultado sería a1 debido a que utiliza la concatenación de cadenas.

Para obtener el resultado que esperaba (b), tendría que usar chr(ord('a') + 1), donde ord() devuelve explícitamente el valor ASCII del (primer) carácter.

$a++ es un caso especial, esencialmente una sobrecarga que mira el valor de ascii en lugar del valor en sí mismo como la variable.

0

Cuando realiza una adición, PHP intenta convertir 'a' a un número entero. Al igual que si usara atoi en C, 'a' se interpreta como 0. Por lo tanto, 0 + 1 es 1.

+0

Sí, pero ¿por qué '$ a ++' cambia el valor de '$ a' a' b' y no '1'? – JJJ

+0

Incrementar no es la misma operación que la suma. PHP sigue la convención de Perl. Ver esto: http://php.net/manual/en/language.operators.increment.php – root

1

De http://php.net/manual/en/types.comparisons.php, "a" +1 se ejecuta como 0 + 1. Donde algunos idiomas (C#) se traducirán (cadena) + (int) a (cadena) + (cadena), PHP hace lo contrario: (int) + (int).

Para forzar la concatenación de cadenas en su lugar: "a" . 1 produce 'a1'.

Cuestiones relacionadas