2010-04-29 17 views
5

Estoy trabajando en una clase para manipular códigos de color hexadecimales html en php. Internamente, la clase trata los valores RGB como decimales. Cuando agrego o resta, nunca quiero que el valor exceda 255 ni 'subceed' cero.unsigned tinyint en php?

Si por supuesto, no puedo hacer algo fragmentario como

if ($val > 255) { 
    $val = 255; 
} 
if ($val < 0) { 
    $val = 0; 
} 

Pero eso es detallado: P

¿Hay una manera inteligente, de una sola linish puedo conseguir el valor para estar entre 0 y 255 ?

Respuesta

11

Posiblemente pueda decir algo como: $ val = max (0, min (255, $ val));

1

Utilizando el bitwise OR operator funcionaría

if(($num | 255) === 255) { /* ... */ } 

Ejemplo:

foreach (range(-1000, 1000) as $num) { 
    if(($num | 255) === 255) { 
     echo "$num, "; 
    }; 
} 

imprimiría todos los números del 0 al 255.

+0

¿Por qué molestar a ORing? Un simple '$ var & = 0xFF' enmascara el valor en un rango de 0-255 –

+0

@MarcB ¿Qué le molesta * sobre el uso de O? – Gordon

+0

La respuesta de Marc B tiene sentido; no entiendo lo que Gordon está tratando de lograr. – symcbean

0

o usted podría ser el tipo que utiliza ternaria anidada operadores.

por ejemplo.

(($num > 255) ? 255 : (($num < 0) ? 0 : $num)) 
+0

Los operadores ternarios anidados son solo divertidos para la diversión personal. –

+0

Ellos estaban pidiendo una sola línea de código inteligente, y creo que esto satisface esa definición (a excepción de la línea adicional de documentación que necesitaría incluir) –

+0

@Jonathan Estoy con ustedes hasta el final. Ojalá tuviera más de un punto para dar. – user151841