2009-02-12 27 views
8

Creo que esta es una pregunta tonta, pero no pude encontrarla en php. ¿Por qué es un + con los = en el siguiente código:¿Para qué se usa + =?

function calculateRanking() 
{ 
    $created = $this->getCreated(); 

    $diff = $this->getTimeDifference($created, date('F d, Y h:i:s A')); 

    $time = $diff['days'] * 24; 
    $time += $diff['hours']; 
    $time += ($diff['minutes']/60); 
    $time += (($diff['seconds']/60)/60); 

    $base = $time + 2;   

    $this->ranking = ($this->points - 1)/pow($base, 1.5); 

    $this->save(); 
} 

es esto así $ el tiempo tiene todos esos valores o mejor dicho, es la adición de todos los valores a $ tiempo?

Gracias

Respuesta

34

Se sumando todos los valores a tiempo.

something += somethingelse 

es un acceso directo para

something = something + somethingelse 

-Adam

+4

TENGA EN CUENTA: Esto no funciona con cadenas. Para concatenar cadenas, use. = ... ¡Esto me ha vuelto loco! –

+0

Eso es cierto, pero eso es porque period es el operador de concatenación. + permite la concatenación por conveniencia, pero en realidad es punto. –

+0

¿por qué los comentarios de otras personas se publican más arriba que el mío, a pesar de que contesté primero? Es un poco difícil obtener una respuesta correcta si la mía aparece después de la de otras personas con una reputación 1000 veces superior a la mía, aunque la mía era correcta y debería acreditarse con la respuesta correcta. – DMCS

11
$time += $diff['hours']; 

es lo mismo que decir

$time = $time + $diff['hours']; 
+0

¿Por qué los comentarios de otras personas se publican más arriba que los míos, aunque respondí primero? Es un poco difícil obtener una respuesta correcta si la mía aparece después de la de otras personas con una reputación 1000 veces superior a la mía, aunque la mía era correcta y debería acreditarse con la respuesta correcta. – DMCS

+0

Si se acepta una respuesta, se mostrará primero. Pasado, los usuarios verán las respuestas según el orden de clasificación que hayan seleccionado (más antiguo | nuevo | votos). Creo que clasificar por votos es el predeterminado. Tu respuesta es la más antigua, y está bien, pero la de Adam es más clara. – Zoredache

+0

Lo siento. Mi respuesta siempre estuvo por debajo de tu incluso cuando teníamos el mismo valor de voto. Alguien votó mi respuesta solo una sobre la tuya y solo entonces fue la mía la que se mencionó primero. Más tarde, la pregunta de asker aceptó mi respuesta, que lo coloca en la parte superior. –

7

a += 2; es el equivalente de a = a + 2;

En un tiempo con algunos idiomas (especialmente los muy viejos compiladores de C), el compilador produjo un mejor código con la primera opción. Se queda ahora porque es un idioma común y la gente lo usa para pensar que es más claro.

+0

Se escribe más rápido, especialmente con nombres largos de variables. Es por eso que todavía se usa. Lo mismo se aplica para i ++, que de nuevo es un atajo para i + = 1. Solo se guardó un carácter, pero es mucho más fácil de escribir porque solo hay dos (en lugar de tres) caracteres DIFERENTES. –

+0

Lo uso, y nunca lo había pensado antes, pero parece que "escribir más rápido" es a veces una mala optimización para hacer; es una pendiente resbaladiza a nombres de variables de una letra y otras técnicas del siglo pasado. –

+0

La cosa es "a = a + 1;" frente a "a + = 1;" o "++ a;" importa poco Sin embargo, "long_and_descriptive_array_name [descriptive_function (other_variable)] + = 1;" es una victoria –

2

x + = 10 es simplemente un camino más corto para escribir x = x + 10.

En este caso, el código es encontrar la diferencia de tiempo en horas a partir de una estructura de diferencia horaria.

2

Operador de acceso directo para $ val = $ val + $ otherval.

Esto sólo funciona en los valores numéricos

+0

Si el operador 'más' está definido para operaciones de cadena (por ejemplo, Javascript), val + = cadena funcionará allí. En PHP, sería '$ val. = 'Some string'' para concatenación. –

2

Vamos a sustituir algunas cosas para que sea un poco más fácil de entender.

El + = es la misma de la siguiente manera:

$time = $diff['days'] * 24; 
$time = $time + $diff['hours']; 
$time = $time + ($diff['minutes']/60); 
$time = $time + (($diff['seconds']/60)/60); 
4

Hay un montón de estos operadores de la taquigrafía en C, C++ en otros idiomas modernos.

a -= b; // a = a - b; 
a *= b; // a = a * b; 
a &= b; // a = a & b; 

etc., etc., etc.

1

Además, "a + b =" es una expresión que su valor puede ser utilizado de nuevo inmediatamente,

(((((a += b) *= c) += d) * e) += f); 

es mucho menos de escribir que

a = a + b; 
a = a * c; 
a = a + d; 
a = a * e; 
a = a + f; 
+1

No es mucho menos escribir en su ejemplo particular. Sin embargo, ciertamente es mucho menos legible. –

+1

Pero escribir mucho más que a = ((((a + b) * c) + d) * e) + f) –

+0

No escriba código como este no puede mantener o depurarlo. Mantenlo simple, tus 5 líneas de código ganarán a largo plazo ...(y el tiempo de ejecución será el mismo de todos modos) – Johan

2

Sólo quería añadir que esta información es, de hecho, en la web de PHP en la sección sobre operators, om mineral específicamente, assignment operators.

+0

buscando en los documentos de idioma para ganar! – crashmstr

-1

Por qué cada cuerpo va de una manera simple si estamos usando + = o - = o cualquier combinación de más de un operador significa que estamos realizando alguna acción de la manera más rápida como si haces a = a + b aquí compilador genera 2 token para a y 1 para b que agrega ese valor y lo almacena su proceso complejo y lento que consume tiempo pero si lo haces a = + b aquí tenemos solo 2 tokens y es similar a la operación de bits que funciona rápido. Para más detalles acerca de la codificación en el compilador o en el código, puede ponerse en contacto con mi ID, que es [email protected]

+0

En realidad no es cierto, a + = b es solo un atajo de código para a = a + b. – ajacian81

+1

¡Vaya! Me quedé sin aliento solo leyendo esa respuesta (una oración larga). –

Cuestiones relacionadas