2010-04-29 13 views
5

Sto lavorando a una classe per manipolare i codici colore esadecimale html in php. Internamente, la classe considera i valori RGB come decimali. Quando aggiungo o sottraggo, non voglio mai che il valore superi i 255 né 'subceed' zero.tinyint non firmato in php?

Se Certo, posso fare qualcosa di frammentario come

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

Ma questo è verbose: P

C'è un modo unico linish intelligente posso ottenere il valore di rimanere tra 0 e 255 ?

risposta

11

Si potrebbe eventualmente dire qualcosa come: $ val = max (0, min (255, $ val));

1

Utilizzando la bitwise OR operator avrebbe funzionato

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

Esempio:

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

sarebbe stampare tutti i numeri da 0 a 255.

+0

Perché preoccuparsi di ORing? Un semplice '$ var & = 0xFF' maschererà il valore nell'intervallo 0-255 –

+0

@MarcB che cosa * si preoccupa * dell'utilizzo di OR? – Gordon

+0

La risposta di Marc B ha senso: non capisco cosa stia cercando di raggiungere Gordon. – symcbean

0

o si potrebbe essere quel ragazzo che usa ternario nidificato operatori.

es.

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

Gli operatori ternari nidificati sono divertenti solo per il divertimento personale. –

+0

Stavano chiedendo una singola riga di codice intelligente, e penso che questo soddisfi questa definizione (eccetto per la linea extra di documentazione che dovresti includere) –

+0

@Jonathan Sono con te fino alla fine. Avrei avuto più di un punto da dare. – user151841

Problemi correlati