Title: como interpretan este fragmento de código en PHP
Tags: php;php7
Question: Tengo este fragmento de código pero no lo interpreto muy bien, lo he realizado de otra forma para calcular si un año es bisiesto pero este código funciona también pero no lo interpreto muy bien y no entiendo porque funciona correctamente
function esBisiesto($year){
if((!($year%4) &amp;&amp; ($year%100)) || !($year%400)){
return TRUE;
}else{
return FALSE;
}
}
Comment: Que es lo que no entiendes? Que has tratado?

Comment: el signo `%`  te da el resto de una división (modulo), php interpreta el 0 como falso. si A%B es 0 significa que B divisor de A, entonces la comparación busca años divisibles por 4 y que ademas no sean divisibles por 100 ó que sean divisibles por 4000 ( los ! invierten la comparacion del resultado )

Comment: Lo que pasa compañero es que no entiendo porque pone esta condicional (!($year%4) && ($year%100))  porque pone el !($year%4) que interpreta de ello yo lo que entiendo de esta forma que el año no sea divisible en 4

Comment: php interpreta el 0 como falso por eso el ! (negación, not)

Comment: Entonces es decir ese falso esta que lo pone como true correcto ?

Comment: Y una última consulta !($year%4) && ($year%100) la condición esta afectando tanto al ($year%4) y al ($year%100)  correcto? y gracias de antemano.

Comment: claro, algo mas claro sería evitar el typecasting y comparar con 0 onda `( ( 0 === $year%4 ) && ( 0 !== $year%100 ) ) || ( 0 === $year%400 )` si ( divisible por 4 pero no por 100 ) o divisible por 400

Comment: Entonces (!($year%4) && ($year%100)) esta condición esta negando toda la regla, gracias por el apoyo.


Here is another answer: Te Recomiendo que busques información sobre Operadores Lógicos (&amp;&amp; y ||) y también como determinar si un año es bisiesto, el operador % es el modulo que lo que realiza es sacar el residuo de dos números en este caso el año y los números 4 , 100, 400.
if((!($year%4) &amp;&amp; ($year%100)) || !($year%400))
Lo que hace el cógido anterior esta comparando que las condiciones dentro del if sean verdaderas para poder verificar si el año es bisiesto o no.
El operador AND (&amp;&amp;) para dar resultado Verdadero/True necesita que las 2 comparaciones sean verdaderas
El operador OR (||) para dar resultado Verdadero/True necesita que una de las comparaciones sean verdaderas
Comment for this answer: Gracias por el apoyo

{'source': 'StackExchangeDataset', 'subset': 'es.stackoverflow.com', 'metadata': {'AnswerCount': 1, 'CommentCount': 8, 'ContentLicense': 'CC BY-SA 4.0', 'CreationDate': '2020:00:06/06/20', 'FavoriteCount': None, 'PostTypeId': 1, 'Tags': '<php><php7>', 'Title': 'como interpretan este fragmento de código en PHP', 'ViewCount': 30, 'id': 362967, 'user_AboutMe': '', 'user_AccountId': 14387932.0, 'user_DisplayName': 'Leen', 'user_Reputation': 75.0, 'user_Views': 11.0, 'user_id': 172401.0}}