2012-07-18 12 views
7

Puede alguien por favor me explique cómo funciona esto:¿Por qué se imprime "imprimir" de derecha a izquierda?

<?php 
    print 5 . print 6 . print 7; 
?> 

imprime: 76151

Sé que el 1 es el valor devuelto por la función print, pero ¿por qué se llaman las funciones en sentido inverso?

+0

¿Puedo preguntar cómo esta cuestión se produjo? ¿Es una versión simplificada de otro problema con el que estás lidiando? –

+0

Tenga en cuenta que imprime el texto, luego devuelve '1', por lo que no puede' imprimir() 'otra' impresión() 'o obtendrá basura' 1' posterior. –

+0

@MikeB Acabo de jugar con la función de impresión. También encontré una pregunta similar en un libro de certificación de php (pero sin ninguna explicación) – MilMike

Respuesta

9

Creo que esto ocurre porque el operador de punto es left-associative.

La expresión se vería así con paréntesis:

print 5 . (print 6 . (print 7)); 
+2

+1 Buen enlace. Es la tercera vez que veo * respuestas asociativas de izquierda esta semana. Acabo de revisarlos todos. –

+0

Conozco esta página, pero nunca he entendido esto a la izquierda/derecha, ahora lo sé mejor, gracias :) – MilMike

2

Su función es la evaluación de derecha a izquierda.

La traza es similar a esto:

print (5 . print 6 . print 7) 

de impresión 7 evalúa primero, la impresión de 7 y volviendo 1.

print (5 . print 6 . 1) 

Esta traza de imprimir 61 y volviendo 1 Por último:

print (5 . 1) 

Y así usted tiene 76151.

0

Su expresión se puede escribir así:

print (5 . print (6 . print 7)); 

print 61 y print 7 son de retorno booleano 1, por eso 1 también se imprime

Cuestiones relacionadas