Operazioni aritmetiche in php con variabili. Operazioni in PHP. Semplici funzioni matematiche

Gli antipiretici per i bambini sono prescritti da un pediatra. Ma ci sono situazioni di emergenza per la febbre quando il bambino ha bisogno di ricevere immediatamente la medicina. Quindi i genitori si assumono la responsabilità e usano farmaci antipiretici. Cosa è permesso dare ai neonati? Come abbassare la temperatura nei bambini più grandi? Quali farmaci sono i più sicuri?

Ultimo aggiornamento: 1.11.2015

In PHP, possiamo usare vari operatori: aritmetico, logico, ecc. Diamo un'occhiata a ciascun tipo di operazione.

Operazioni aritmetiche

    + (operazione di addizione)

    Ad esempio $a + 5

    - (operazione di sottrazione)

    Ad esempio $a - 5

    * (moltiplicazione)

    Ad esempio $a * 5

    / (divisione)

    Ad esempio $a/5

    % (resto della divisione)

    Ad esempio: $a=12; echo $a % 5; // è uguale a 2

    ++ (aumenta/aumenta il valore di uno)

    Ad esempio, ++$a

    È importante comprendere la differenza tra le espressioni ++$a e $a++ . Per esempio:

    $a=12; $b=++$a; // $b è uguale a 13 echo $b;

    Qui, prima, viene aggiunto uno al valore della variabile $a, e poi il suo valore viene equalizzato alla variabile $b. Altrimenti sarebbe se l'espressione fosse così: $b=$a++; . Qui, prima, il valore della variabile $a era uguale alla variabile $b, quindi il valore della variabile $a è stato incrementato.

    -- (decrementa/riduce il valore di uno)

    Ad esempio, --$a . E proprio come nel caso dell'incremento, ci sono due tipi di notazione: --$a e $a--

Operazioni di affidamento

    Imposta una variabile su un valore specifico: $a = 5

    Addizione seguita da assegnazione del risultato. Ad esempio: $a=12; $a += 5; echo $a; // è uguale a 17

    Sottrazione seguita da assegnazione del risultato. Ad esempio: $a=12; $a -= 5; echo $a; // è uguale a 7

    Moltiplicazione seguita da assegnazione del risultato: $a=12; $a *= 5; echo $a; // è uguale a 60

    Divisione seguita da assegnazione del risultato: $a=12; $a /= 5; echo $a; // è uguale a 2,4

    Concatenazione di stringhe con assegnazione del risultato. Si applica a due righe. Se le variabili non memorizzano stringhe, ma, ad esempio, numeri, allora i loro valori vengono convertiti in stringhe e quindi viene eseguita l'operazione: $a=12; $a .= 5; echo $a; // uguale a 125 // identico a $b="12"; $b .="5"; // è uguale a 125

    Ottenere il resto di una divisione e quindi assegnare il risultato: $a=12; $a %= 5; echo $a; // è uguale a 2

Operazioni di confronto

Le operazioni di confronto, di norma, vengono utilizzate nelle costruzioni condizionali, quando è necessario confrontare due valori e, a seconda del risultato del confronto, eseguire alcune azioni. Disponibile seguenti operazioni confronti.

    L'operatore di uguaglianza confronta due valori e, se sono uguali, restituisce true, altrimenti restituisce false: $a == 5

    L'operatore identità confronta anche due valori, e se sono uguali restituisce true, altrimenti restituisce false: $a === 5

    Confronta due valori e restituisce vero se non sono uguali, altrimenti restituisce falso: $a!= 5

    Confronta due valori e, se non sono uguali, restituisce true, altrimenti restituisce false: $a !== 5

    Confronta due valori e se il primo più di un secondo, quindi restituisce true, altrimenti restituisce false: $a > 5

    Confronta due valori e, se il primo è minore del secondo, restituisce true, altrimenti restituisce false: $a< 5

    Confronta due valori e, se il primo è maggiore o uguale al secondo, restituisce true, altrimenti restituisce false: $a >= 5

    Confronta due valori e, se il primo è minore o uguale al secondo, restituisce true, altrimenti restituisce false: $a<= 5

Operatore di uguaglianza e identità

Entrambi gli operatori confrontano due espressioni e restituiscono vero se le espressioni sono uguali. Ma ci sono differenze tra loro. Se nell'operazione di uguaglianza vengono presi due valori di tipo diverso, vengono ridotti a uno, quello che l'interprete trova ottimale. Per esempio:

Ovviamente, le variabili memorizzano valori diversi di tipi diversi. Ma se confrontati, saranno ridotti allo stesso tipo: numerico. E la variabile $a verrà convertita nel numero 22. E di conseguenza, entrambe le variabili saranno uguali.

Oppure, ad esempio, anche le seguenti variabili saranno uguali:

$a = falso; $b = 0;

Per evitare tali situazioni, viene utilizzata l'operazione di equivalenza, che tiene conto non solo del valore, ma anche del tipo della variabile:

$a = "22a"; $ b = 22; if($a===$b) echo "uguale"; else echo "non uguale";

Ora le variabili non saranno uguali.

Gli operatori di disuguaglianza != e !== funzionano in modo simile.

Operazioni booleane

Le operazioni booleane vengono in genere utilizzate per combinare i risultati di due operazioni di confronto. Ad esempio, dobbiamo eseguire una determinata azione se diverse condizioni sono vere. Sono disponibili le seguenti operazioni logiche:

    Restituisce vero se entrambe le operazioni di confronto restituiscono vero, altrimenti restituisce falso: $a == 5 && $b = 6

    Simile a && : $a == 5 e $b > 6

    Restituisce true se almeno un'operazione di confronto restituisce true, altrimenti restituisce false: $a == 5 || $ b = 6

    Analogamente all'operazione || : $a< 5 or $b > 6

    Restituisce vero se l'operazione di confronto restituisce falso: !($a >= 5)

    Restituisce vero se solo uno dei valori è vero. Se entrambi sono veri o nessuno dei due, restituisce falso. Ad esempio: $a=12; $b=6; if($a xo $b) echo "vero"; else echo "falso";

    In questo caso, il risultato dell'operazione logica sarà false , poiché entrambe le variabili hanno un certo valore. Cambiamo il codice:

    $a=12; $b=NULLO; if($a xo $b) echo "vero"; else echo "falso";

    Qui già il risultato sarà true , poiché il valore di una variabile non è impostato. Se la variabile è NULL, nelle operazioni logiche il suo valore sarà considerato falso

Operazioni sui bit

Le operazioni sui bit vengono eseguite su singoli bit di un numero. I numeri sono considerati nella rappresentazione binaria, ad esempio, 2 nella rappresentazione binaria è 010, il numero 7 è 111.

    & (moltiplicazione booleana)

    La moltiplicazione viene eseguita bit per bit, e se entrambi gli operandi hanno valori in bit uguali a 1, allora l'operazione restituisce 1, altrimenti viene restituito il numero 0. Ad esempio: $a1 = 4; //100 $b1 = 5; //101 echo $a1 & $b1; // è uguale a 4

    Qui, il numero 4 in binario è 100 e il numero 5 è 101. Moltiplica i numeri bit per bit e ottieni (1*1, 0*0, 0*1) = 100, cioè il numero 4 in decimale.

    | (aggiunta logica)

    Analogamente alla moltiplicazione logica, l'operazione viene eseguita anche su cifre binarie, ma ora viene restituito uno se almeno un numero in questo bit ha uno. Ad esempio: $a1 = 4; //100 $b1 = 5; //101 echo $a1 | $b1; // è uguale a 5

    ~ (negazione logica)

    inverte tutte le cifre: se il valore di una cifra è 1, diventa zero e viceversa. $ b = 5; echo ~$b;

    X<

    x>>y - sposta il numero x a destra di y cifre. Ad esempio, 16>>1 sposta il numero 16 (che è 10000 in binario) di una cifra a destra, risultando in 1000 o 8 in decimale

Concatenazione di stringhe

L'operatore punto viene utilizzato per concatenare le stringhe. Ad esempio, uniamo più righe:

$a="Ciao, "; $b="mondo"; eco $a . $ b. "!";

Se le variabili non rappresentano stringhe, ma altri tipi, ad esempio numeri, allora i loro valori vengono convertiti in stringhe e quindi avviene anche l'operazione di concatenazione delle stringhe.

Questo argomento è importante perché quasi tutte le applicazioni hanno un qualche tipo di operazione computazionale. Le operazioni sui numeri sono presentate nella tabella sottostante.

Operazioni aritmetiche in php

Penso che questi operatori non abbiano bisogno di molte spiegazioni. Ecco un esempio di utilizzo di ciascuno di essi:

\$num2 = ". $num2; //Esempio di sommatoria: eco "
\$num1 + \$num2 = ". ($num1 + $num2); //Esempio di sottrazione: eco "
\$num1 - \$num2 = ". ($num1 - $num2); // Esempio di moltiplicazione: eco "
\$num1 * \$num2 = ". $num1 * $num2; //Esempio di divisione: eco "
\$num1: \$num2 = ". $num1 / $num2; //Un esempio del resto della divisione: eco "
\$num1 % \$num2 = ". $num1 % $num2; //Esempio di incremento in forma di prefisso: eco "
++\$num1 = ". ++$num1; //Ora $num1 = 11 $num1=10; //valore iniziale assegnato //Esempio di incremento nella forma del prefisso post: eco "
\$num1++ = ". $num1++; //Ora $num1 = 11 $num1=10; //valore iniziale assegnato //Esempio di decremento in forma di prefisso: eco "
--\$num1 = ". --$num1; $num1=10; //Esempio di decremento in forma post-prefisso: eco "
\$num1-- = ". $num1--; ?>

Il risultato dell'esecuzione del codice precedente:

$num1 = 10
$num2 = 7
$num1 + $num2 = 17
$num1 - $num2 = 3
$num1 * $num2 = 70
$num1: $num2 = 1,42857142857
$num1 % $num2 = 3
++$num1 = 11
$num1++ = 10
--$num1 = 9
$num1-- = 10

Differenza tra forma prefisso e postprefisso:

  • in forma di prefisso(++ davanti alla variabile) prima viene incrementato di uno, quindi viene visualizzato il risultato
  • in forma post-prefisso(++ sta dopo la variabile) prima viene visualizzato il risultato e poi l'incremento è già stato eseguito

Per capire meglio la differenza, ecco un classico esempio che viene riportato in molti manuali di programmazione:

//Assegna valori alle variabili:$num1 = 10; $num2 = 7; $rez = ++$num1 + $num2; // il risultato sarà 18 eco "
\$rez = ". $rez; //Assegna $num1 valore iniziale:$num1 = 10; $rez = $num1++ + $num2; // il risultato sarà 17 eco "
\$rez = ". $rez; //Le operazioni ++ e -- possono essere applicate anche alle stringhe$str = "abc"; eco "
".++$str; // il risultato sarà la stringa "abd" ?>

Vale la pena notare che quando si aggiungono variabili, è possibile utilizzare due tipi di record:

  • $num1 = $num1 + $num2 - notazione normale;
  • $num1 += $num2 è una scorciatoia. Il risultato di queste operazioni sarà lo stesso. La notazione abbreviata può essere utilizzata anche con sottrazioni e moltiplicazioni.

operatori di confronto in php

Gli operatori di confronto vengono utilizzati nei test delle condizioni if ​​e così via. Tuttavia, in questa lezione non considereremo gli operatori condizionali, ma solo gli operatori di confronto. Tutti gli operatori di confronto sono elencati nella tabella seguente:

Non c'è niente di complicato qui, il principio è lo stesso della matematica. L'unica particolarità è che vero (vero) è 1 e falso (falso) è 0. Diamo esempio dettagliato in PHP:

//Assegna valori alle variabili:$num1 = 10; $num2 = 7; echo "\$num1 > \$num2 = ". ($num1 > $num2); //ottenere 1 (10 > 7 - a destra) echo "\$num1 //ottenere 0 (10 // Puoi scrivere più facilmente: eco "
10 // 0 eco "
20 // 0 eco "
1 == 1 = ". (1 == 1); // 1 eco "
0 == \"\" = ". (0 == ""); // 1 eco "
0 === 0 = ". (0 === 0); // 1 eco "
0 === \"\" = ". (0 === ""); // 0 eco "
true = ". true; // 1 echo "
false = ". false; // 0 ?>

Nota:

  • Se falso, 0 non verrà emesso
  • L'operatore di equivalenza restituisce 1 solo se esiste una corrispondenza esatta. Ad esempio, 0 == "" è vero, ma 0 === "" non è più vero perché non esiste una corrispondenza esatta.

Operazioni variabili PHP (dichiarazioni)

Esistono diversi gruppi per l'implementazione.

Un operatore è qualcosa che consiste in uno o più valori (espressioni in gergo di programmazione) che possono essere valutati come un nuovo valore (quindi l'intero costrutto può essere trattato come un'espressione). Ne consegue che funzioni o altri costrutti che restituiscono un valore (ad esempio, stampa()) sono operatori, a differenza di tutti gli altri costrutti linguistici (ad esempio, eco()) che non restituiscono nulla.

Operazioni aritmetiche in PHP

Ricordi le basi scolastiche dell'aritmetica? Gli operatori descritti di seguito funzionano allo stesso modo.

L'operatore di divisione ("/") restituisce sempre un tipo reale, anche se entrambi i valori erano numeri interi (o stringhe convertibili in numeri interi). Altrimenti, il risultato sarà frazionario.

L'operazione di calcolo del resto della divisione " % " funziona solo con numeri interi, quindi applicarlo a numeri frazionari può portare a risultati indesiderati.

Puoi usare le parentesi. La precedenza di alcune operazioni matematiche su altre e il cambio di priorità quando si usano le parentesi nelle espressioni aritmetiche corrispondono alle solite regole matematiche.

Operazioni di incremento e decremento

PHP, come C, supporta gli operatori di incremento e decremento prefisso e postfisso.

Operatori di incremento e decremento suffisso

Come in C, questi operatori incrementano o decrementano il valore di una variabile e restituiscono il valore della variabile in un'espressione. $a prima del cambio. Per esempio:

$a=10;
$b=$a++;
echo "a=$a, b=$b"; // restituisce a=11, b=10

Come puoi vedere, prima la variabile $ b assegnato un valore a una variabile $a, e solo allora quest'ultimo è stato incrementato. Tuttavia, un'espressione il cui valore è assegnato a una variabile $ b, può essere più difficile - in ogni caso, l'incremento $a avviene solo dopo che è stato calcolato.

Prefisso operatori di incremento e decremento

Esistono anche operatori di incremento e decremento, che vengono specificati anziché dopo il nome della variabile. Di conseguenza, restituiscono il valore della variabile dopo la modifica. Esempio:

$a=10;
$b=--$a;
echo "a=$a, b=$b"; // restituisce a=9, b=9

Le operazioni di incremento e decremento sono utilizzate molto spesso nella pratica. Ad esempio, si verificano in quasi tutti i cicli per .

eco "

Incremento suffisso

" ;
$a = 5 ;
echo "Dovrebbe essere 5: " . $a++. "
\N" ;

\N" ;

eco "

incremento del prefisso

" ;
$a = 5 ;
echo "Dovrebbe essere 6: " . ++ $a. "
\N" ;
echo "Dovrebbe essere 6: " . $a. "
\N" ;

eco "

Decremento suffisso

" ;
$a = 5 ;
echo "Dovrebbe essere 5: " . $a -- . "
\N" ;

\N" ;

eco "

decremento del prefisso

" ;
$a = 5 ;
echo "Dovrebbe essere 4: " . -- $a. "
\N" ;
echo "Dovrebbe essere 4: " . $a. "
\N" ;
?>

Operazioni sulle stringhe

PHP ha due operatori per lavorare con le stringhe. Il primo è l'operatore di concatenazione ("."), che restituisce la concatenazione degli argomenti sinistro e destro. Il secondo è l'operatore di assegnazione di concatenazione, che aggiunge l'argomento destro all'argomento sinistro. Facciamo un esempio concreto:

$a = "ciao" ;
$b = $a. "Mondo!" ; // $b contiene la stringa "Hello World!"

$a = "ciao" ;
$a .= "Mondo!" ; // $a contiene la stringa "Hello World!"
?>

Operazioni bit a bit

Queste operazioni servono per operare (impostare/cancellare/controllare) gruppi di bit in una variabile intera. I bit di un intero non sono altro che singole cifre dello stesso numero scritte in binario. Ad esempio, in binario il numero 12 assomiglierebbe a 1100 e 2 assomiglierebbe a 10, quindi l'espressione 12|2 ci restituirà il numero 14 (1110 in notazione binaria). Se la variabile non è un numero intero, allora it
l'arrotondamento successivo viene arrotondato per eccesso e quindi vengono applicati i seguenti operatori.

32 bit sono usati per rappresentare un singolo numero:

  • 0000 0000 0000 0000 0000 0000 0000 0000 è zero;
  • 0000 0000 0000 0000 0000 0000 0000 0001 è 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 è 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 è 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 è 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 è 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 è 15;

Operatori bit a bit:

Esempio Nome Risultato
$a e $b Bit a bit "e" Vengono impostati solo i bit impostati sia in $a che in $b.
$a | $ b Bit a bit "o" Quei bit impostati in $a o $b sono impostati.
$a ^ $b esclusivo o Vengono impostati solo i bit impostati in $a o $b.
~$a Negazione I bit che non sono impostati in $a vengono impostati e viceversa.
$a<< $b Sposta a sinistra Tutti i bit in $a vengono spostati di $b posizioni a sinistra (ogni posizione significa "moltiplica per 2")
$a >> $b sposta a destra Tutti i bit della variabile $a vengono spostati di $b posizioni a destra (ogni posizione implica "dividi per 2")

Operazioni di confronto

Gli operatori di confronto, come suggerisce il nome, consentono di confrontare due valori tra loro.

Queste sono operazioni uniche a modo loro, perché indipendentemente dal tipo dei loro argomenti, restituiscono sempre una delle due cose: falso O VERO. Le operazioni di confronto consentono di confrontare due valori tra loro e, se la condizione è soddisfatta, restituire VERO, E se no - falso.

In PHP, solo le variabili scalari possono essere confrontate. Gli array e gli oggetti non possono essere confrontati in PHP. Non possono nemmeno essere confrontati per l'uguaglianza (usando l'operatore ==), ma PHP non emette un avviso quando lo fa. Quindi, una volta chiedendosi perché due array completamente diversi quando li si confronta con == sono improvvisamente uguali, ricorda che prima di confrontare entrambi gli operandi vengono convertiti in una parola vettore, che viene poi confrontato.

Vedere Confronto tra array per i dettagli.

Operatori di confronto:

Esempio Nome Risultato
$a == $b Equivale VERO se $a è uguale a $b.
$a === $b Ugualmente uguale VERO se $a è uguale a $b e ha lo stesso tipo. (Aggiunto in PHP 4)
$a != $b Non uguale VERO se $a non è uguale a $b.
$a<>$ b Non uguale VERO se $a non è uguale a $b.
$a !== $b Identico non uguale VERO se $a non è uguale a $b o se sono di tipo diverso (Aggiunto in PHP 4)
$a< $b Meno VERO se $a è strettamente minore di $b.
$a > $b Di più VERO se $a è strettamente maggiore di $b.
$a<= $b Minore o uguale VERO se $a è minore o uguale a $b.
$a >= $b Più o uguale VERO se $a è maggiore o uguale a $b.

Operazioni booleane

Gli operatori logici sono progettati esclusivamente per lavorare con espressioni logiche e anche restituire falso O VERO.

Ecco una tabella di operatori logici PHP:

Si noti che la valutazione delle espressioni logiche contenenti tali operatori va sempre da sinistra verso destra, e se il risultato è già evidente (ad esempio, falso&&qualcosa dà sempre falso), quindi i calcoli vengono terminati, anche se nell'espressione sono presenti chiamate di funzione. Ad esempio, nell'istruzione $logic = 0&&(time()>100); funzione standard tempo() non sarà mai chiamato.

Fai attenzione alle operazioni logiche: non dimenticare di raddoppiare il carattere. Si noti che, ad esempio, | E || - due operatori completamente diversi, uno dei quali può potenzialmente restituire qualsiasi numero e il secondo solo falso E VERO.

Gli operatori di incremento (++) e decremento (--) non funzionano sulle variabili booleane.

Operatori di equivalenza

In PHP, poiché PHP4 esiste un operatore di confronto identico: un triplo segno di uguale === ,
o l'operatore del check-in. PHP è abbastanza tollerante nei confronti delle stringhe che vengono convertite implicitamente in numeri e viceversa.
Ad esempio, il codice seguente produrrà che i valori delle variabili sono uguali:

$a=10;
$b="10";

E questo nonostante il fatto che la variabile $aè un numero, e $ b- linea. Ora diamo un'occhiata a un esempio leggermente diverso:

$a=0; // zero
$b=""; // riga vuota
if($a==$b) echo "aeb sono uguali"; // Stampa "a e b sono uguali"

Sebbene $a E $ b chiaramente non sono uguali nemmeno nel senso usuale della parola, la sceneggiatura dichiarerà che sono la stessa cosa. Perché sta succedendo? Il fatto è che se uno degli operandi di un operatore logico può essere trattato come un numero, entrambi gli operandi vengono trattati come numeri. Questo trasforma la stringa vuota in 0 , che viene quindi confrontato con zero. Non sorprende che l'operatore eco lavori.
Il problema è risolto dall'operatore di equivalenza === (tripla uguaglianza). Non solo confronta due espressioni, ma anche i loro tipi. Riscriviamo il nostro esempio usando questo operatore.

È improbabile che i programmatori che devono eseguire calcoli numerici, scientifici o statistici responsabili considerino un linguaggio di scripting Web un candidato accettabile per questo ruolo. Detto questo, il linguaggio PHP offre un'ampia serie di funzionalità che forniscono una soluzione completa alla maggior parte dei problemi matematici che si presentano con gli script web. Inoltre, il linguaggio PHP fornisce alcune funzionalità più avanzate, come l'aritmetica di precisione arbitraria, oltre a funzionalità per l'hashing di librerie e librerie crittografiche.

Gli sviluppatori del linguaggio PHP hanno adottato un approccio fondato e non hanno fatto alcun tentativo di reinventare ruote progettate per questo scopo. Il fatto è che molte delle funzioni matematiche fondamentali utilizzate nel linguaggio PHP sono solo wrapper degli equivalenti di queste funzioni nel linguaggio C.

Operazioni matematiche

La maggior parte delle operazioni matematiche nel linguaggio PHP vengono eseguite sotto forma di funzioni integrate, non sotto forma di operazioni. Oltre alle operazioni di confronto, PHP fornisce cinque semplici operazioni aritmetiche, nonché alcune operazioni abbreviate che consentono di scrivere espressioni di incremento e decremento più brevi, nonché assegnazioni.

Operazioni aritmetiche

Le cinque operazioni aritmetiche di base includono quelle operazioni che sono solitamente implementate in qualsiasi calcolatrice a quattro funzioni, così come l'operazione modulo (%). Una breve descrizione delle operazioni aritmetiche è data nella tabella:

Operazioni aritmetiche
Operazione Descrizione
+ Restituisce la somma dei valori dei suoi due operandi
- Se sono presenti due operandi, il valore dell'operando destro viene sottratto dal valore dell'operando sinistro. Se è presente solo l'operando destro, l'operazione restituisce il valore di questo operando con il segno opposto
* Restituisce il prodotto dei valori dei suoi due operandi
/ Restituisce il risultato in virgola mobile della divisione del valore dell'operando sinistro per il valore dell'operando destro
% Restituisce il resto della divisione intera del valore dell'operando di sinistra per il valore assoluto dell'operando di destra

Quando si utilizzano le prime tre operazioni aritmetiche sopra descritte (+, -, *) nel programma, è necessario tenere conto del fatto che quando vengono eseguite queste operazioni, il tipo si propaga da valori in virgola mobile a doppia precisione a valori interi. Ciò significa che se entrambi gli operandi dell'operazione sono numeri interi, il risultato è un numero intero e se almeno uno degli operandi è un numero a virgola mobile a precisione doppia, il risultato è un numero a virgola mobile a precisione doppia. Lo stesso tipo di propagazione del tipo si verifica quando si esegue un'operazione di divisione; inoltre, c'è un tale effetto aggiuntivo che il risultato diventa un numero in virgola mobile a precisione doppia se la divisione non viene eseguita senza resto (intero).

L'operatore modulo (%) in PHP accetta operandi interi e, se questa operazione viene applicata a numeri in virgola mobile a precisione doppia, questi numeri vengono prima convertiti in numeri interi (scartando la parte frazionaria). Il risultato di tale operazione è sempre un numero intero.

Operazioni di incremento e decremento

Gran parte della sintassi di PHP è ereditata dal C, e i programmatori C hanno una reputazione di brevità e orgoglio per questo. Gli operatori di incremento e decremento, presi dal linguaggio C, ci permettono di rappresentare in modo più sintetico espressioni come $count = $count + 1 , che di solito sono abbastanza comuni nei programmi.

L'operatore di incremento (++) viene utilizzato per aggiungere uno al valore della variabile a cui si applica questa operazione e l'operatore di decremento (--) sottrae uno dal valore di tale variabile.

Ognuna di queste due operazioni ha due varietà: suffisso(in questa forma, il segno dell'operazione è posto immediatamente dopo la variabile a cui si applica l'operazione) e prefisso(in questa forma, il segno dell'operazione è posto immediatamente prima della variabile a cui si applica l'operazione). Entrambe le versioni hanno lo stesso effetto collaterale di modificare il valore di una variabile, ma gli operatori di suffisso e prefisso restituiscono valori diversi se utilizzati come espressioni. L'operatore suffisso opera in modo tale che il valore della variabile cambi dopo che il valore dell'espressione è stato restituito, mentre l'operatore prefisso opera in modo tale che il valore venga prima modificato e quindi il nuovo valore venga restituito alla variabile. Questa differenza può essere trovata utilizzando gli operatori di decremento e incremento negli operatori di assegnazione:

Codice PHP $conteggio = 0; $risultato = $conteggio++; echo "Risultato dell'incremento di $count++: ".$result."
"; $conteggio = 0; $risultato = ++$conteggio; echo "Risultato dell'incremento di ++$conteggio: ".$risultato."
";

Le istruzioni precedenti generano il seguente output nella finestra del browser:

Operazioni di incremento

In questo esempio, l'istruzione $result = $count++ è completamente equivalente alle istruzioni:

Codice PHP $risultato = $conteggio; $conteggio = $conteggio + 1;

Insieme a questo, l'operatore $result = ++$count è equivalente ai seguenti operatori:

Codice PHP $conteggio = $conteggio +1; $risultato = $conteggio;

Operazioni di affidamento

Le operazioni di incremento (e decremento) riducono la quantità di codice necessaria per aggiungere uno al valore di una variabile, ma non riducono la quantità di codice che assegna il valore della variabile a un altro numero o ad altre operazioni aritmetiche. Fortunatamente, tutti e cinque gli operatori aritmetici hanno operatori di assegnazione corrispondenti (+=, -=, *=, /= e %=) che consentono di assegnare a una variabile in una breve espressione il risultato dell'esecuzione di un'operazione aritmetica sul valore di questa variabile. Ad esempio, l'operatore

Codice PHP $count = $count * 3;

può essere abbreviato come

Codice PHP $count *= 3;

Semplici funzioni matematiche

La fase successiva nella complessità del programma rispetto a quella in cui vengono utilizzate solo operazioni aritmetiche è l'utilizzo di tutti i tipi di funzioni. Le funzioni consentono di eseguire attività come la conversione da un tipo numerico a un altro (vedere Tipi di dati) e trovare il numero minimo o massimo in un insieme di numeri. La tabella seguente fornisce semplici funzioni matematiche:

Funzioni matematiche semplici PHP
Funzione Descrizione
pavimento() Accetta un singolo parametro effettivo (di solito un numero in virgola mobile a precisione doppia) e restituisce il numero intero più grande minore o uguale a quel parametro effettivo (arrotondamento per difetto)
ceil() Il nome di questa funzione è l'abbreviazione di ceiling. La funzione accetta un singolo parametro effettivo (in genere un numero in virgola mobile a precisione doppia) e restituisce il numero intero più piccolo maggiore o uguale a tale parametro effettivo (arrotondato per eccesso)
girare() Accetta un singolo parametro effettivo (in genere un numero a virgola mobile a precisione doppia) e restituisce il numero intero più vicino
addominali() Il valore assoluto di un numero. Se il singolo parametro effettivo numerico ha un valore negativo, la funzione restituisce il numero positivo corrispondente; se il parametro effettivo è positivo, la funzione restituisce il parametro effettivo stesso
minimo() Accetta qualsiasi numero di parametri effettivi numerici (ma almeno uno) e restituisce il più piccolo di tutti i valori dei parametri effettivi
massimo() Accetta qualsiasi numero di parametri effettivi numerici (ma almeno uno) e restituisce il valore più grande di tutti i parametri effettivi

Ad esempio, il risultato della seguente espressione è 3 perché anche il valore di ogni espressione con una chiamata di funzione è 3:

Codice PHP $risultato = min(3, abs(-3), max(round(2.7), ceil(2.3), floor(3.9)));

Generazione di numeri casuali

PHP utilizza due generatori di numeri casuali (chiamati rispettivamente dalle funzioni rand() E mt_rand()). Ad ognuno di questi generatori sono associate tre funzioni con lo stesso scopo: la funzione per impostare il valore iniziale ( rand() E mt_rand()), la stessa funzione del numero casuale e la funzione che seleziona il numero intero più grande che può essere restituito dal generatore (( getrandmax() E mt_getrandmax())). Le funzioni getrandmax() e mt_getrandmax() restituiscono il numero più grande che può essere restituito dalla funzione rand() o mt_rand(), sulle piattaforme Windows questo valore è limitato a 32768.

La scelta di una particolare funzione di generazione di numeri pseudo-casuali, utilizzata nella funzione rand(), può dipendere dalle librerie con cui è stato compilato l'interprete PHP. Al contrario, il generatore mt_rand() utilizza sempre la stessa funzione di generazione di numeri pseudo-casuali (mt è l'abbreviazione di Mersenne Twister), e l'autore della documentazione online per la funzione mt_rand() afferma che questa funzione è anche più veloce e "più casuale" (dal punto di vista crittografico) di rand(). Non abbiamo motivo di dubitare della veridicità di queste affermazioni, quindi preferiamo utilizzare la funzione mt_rand() piuttosto che rand().

Quando si utilizzano alcune versioni di PHP per alcune piattaforme, le funzioni rand() e mt_rand() sembrano generare numeri casuali apparentemente perfettamente accettabili, anche senza prima specificare un valore di inizializzazione. Ma una tale impressione non dovrebbe essere attendibile. In primo luogo, i programmi che utilizzano funzioni di generazione di numeri casuali senza specificare un valore di inizializzazione non possono essere facilmente portati su altre piattaforme e, in secondo luogo, il funzionamento affidabile di queste funzioni senza specificare un valore di inizializzazione non è garantito.

Un modo tipico per impostare un seme per uno qualsiasi dei generatori di numeri casuali di PHP (utilizzando la funzione mt_srand() o srand()) è il seguente:

Codice PHP mt_srand((doppio)microtempo()*1000000);

Questa istruzione imposta il valore iniziale del generatore sul numero di microsecondi trascorsi dall'ultimo secondo intero. (Il cast to double in questa istruzione è effettivamente necessario, perché la funzione microtime() restituisce una stringa, che viene trattata come un numero intero nell'operazione di moltiplicazione, ma non nell'operazione di passaggio del parametro.) Il lettore è incoraggiato a introdurre l'operatore di valore iniziale specificato, anche se non comprende bene lo scopo di questo operatore; è sufficiente inserire questa istruzione in ogni pagina PHP, una sola volta, prima di utilizzare la funzione mt_rand() o rand() corrispondente, e questa istruzione farà in modo che il punto di partenza cambi e quindi venga generata ogni volta una sequenza casuale diversa.

Questo particolare metodo di seeding è stato profondamente studiato da coloro che comprendono appieno i dettagli della generazione di numeri pseudo-casuali e probabilmente sarà per sempre superiore al tentativo di qualsiasi singolo programmatore di qualcosa di più "complicato".

Ovviamente, queste funzioni di generazione di numeri pseudo-casuali restituiscono solo numeri interi, ma un numero intero casuale da un dato intervallo può essere facilmente convertito in un corrispondente numero in virgola mobile (ad esempio, un numero compreso tra 0.0 e 1.0 inclusi) utilizzando un'espressione come rand() / getrandmax(). Successivamente, l'intervallo specificato può essere ridimensionato e spostato secondo necessità. Un esempio è mostrato di seguito:

Codice PHP // Diciamo che dobbiamo generare un numero casuale compreso tra 100.0 e 120.0 $random = 100.0 + 20.0 * mt_rand() / mt_getrandmax(); echo $casuale."
"; // Genera numeri interi (100 - 120); echo round($random);

Prova ad aggiornare più volte la pagina con questo codice per assicurarti che i numeri casuali vengano generati.

Costanti matematiche

In PHP versione 4.0, c'era solo una costante matematica, descritta nella documentazione: M_PI (il valore del numero pi, rappresentato come un numero in virgola mobile a doppia precisione). E da PHP 4.0.2 sono state introdotte molte nuove costanti. La maggior parte di queste nuove costanti si riferivano al numero pi (o multipli di esso), al numero e (o multipli di esso) e alle radici quadrate; inoltre, alcune costanti erano di altro tipo. Ma nelle versioni successive, per una serie di motivi, l'elenco delle costanti è stato nuovamente ridotto a un numero relativamente piccolo di costanti matematiche predefinite:

Costanti matematiche PHP
Costante Descrizione
M_PI π
M_PI_2 pi / 2
M_PI_4 pi / 4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / sqrt(π)
ME e
M_SQRT2 quadrato(2)
M_SQRT1_2 1 / quadrato(2)
M_LOG2E log2(e)
M_LOG10E log(e)
M_LN2 loggia(2)
M_LN10 loggia(10)

Controllo del formato dei numeri

Il linguaggio PHP fornisce una serie di funzioni che consentono di verificare la corretta rappresentazione dei numeri. Sebbene PHP non abbia una tipizzazione forte, si consiglia di utilizzare alcuni di questi controlli nel codice, se necessario, in modo da poter prevedere le caratteristiche dei risultati ottenuti, nonché scegliere il modo migliore per gestirli.

Il primo e più semplice test consiste nell'utilizzare la funzione è_numerico(). Come con la maggior parte degli altri controlli di questo tipo, la funzione is_numeric restituisce un risultato booleano, vero, se l'argomento passato è un dato numerico di qualsiasi tipo (con o senza segno, intero o virgola mobile) o un'espressione matematica che restituisce un valore numerico valido.

Con funzioni è_int() E è_floatÈ possibile determinare se un numero è un numero intero o una frazione. Altri due controlli sono un po' più complicati: le funzioni è_finito() E è_infinito() consentono di eseguire esattamente i controlli che i loro nomi indicano (se il numero è finito o infinito). Ma, in senso stretto, l'intervallo di valori coperto da queste funzioni non può includere l'infinito effettivo (e si può anche verificare se un numero ha un valore infinitamente grande?). Vengono invece utilizzati i limiti dell'intervallo di valori in virgola mobile consentiti sul particolare sistema.

Di seguito è riportato un esempio di utilizzo di queste funzioni:

Codice PHP è_numerico(4); // true is_numeric(25 - 6); // true is_numeric("25"); // true is_numeric("25 - 6"); // falso is_int(4); // true is_int(4.2); // falso is_int("4"); // false - questo controllo è più rigoroso del controllo con la funzione is_numeric() is_float(4); // falso is_float(4.0); // true is_float(M_PI); // VERO

Conversione del sistema numerico

Per impostazione predefinita, PHP utilizza la base 10 per convertire i valori numerici esterni in quelli interni avanti e indietro.Puoi anche dire all'interprete PHP di utilizzare numeri ottali in base 8 (prefisso il numero con uno 0 iniziale) o numeri esadecimali in base 16 (prefisso il numero con 0x) per impostazione predefinita.

Naturalmente, dopo aver convertito i numeri dalla rappresentazione esterna a quella interna, vengono archiviati in memoria in formato binario e tutti i calcoli aritmetici e matematici di base vengono eseguiti nel sistema operativo stesso in base 2. Inoltre, il linguaggio PHP fornisce una serie di funzioni per convertire i numeri da una base del sistema numerico a un'altra. Una panoramica di queste funzionalità è fornita nella tabella seguente:

Funzioni di conversione del sistema numerico
Funzione Descrizione
BinDec() Prende un singolo argomento stringa che è un numero intero binario (numero in base 2) e restituisce la rappresentazione di stringa di quel numero in base 10
DecBin() Simile a BinDec(), ma converte da base 10 a base 2
ottdic() Simile a BinDec(), ma converte da base 8 a base 10
dicott() Simile a BinDec(), ma converte da base 10 a base 8
HexDec() Simile a BinDec(), ma converte da base 16 a base 10
DecHex() Simile a BinDec(), ma converte da base 10 a base 16
base_convert() Accetta un parametro stringa (che rappresenta l'intero da convertire) e due parametri interi (la base e la base desiderata). Restituisce una stringa che rappresenta il numero convertito. In questa stringa, le cifre più vecchie di 9 (da 10 a 35) sono rappresentate dai caratteri a-z. Sia la base originale che quella desiderata devono essere comprese nell'intervallo 2-36

Tutte le funzioni di conversione dei numeri sono funzioni speciali che convertono i numeri da una base specifica a un'altra. L'eccezione è la funzione base_convert(), che accetta parametri arbitrari con la designazione della base iniziale e risultante.

Si noti che tutte le funzioni di conversione numerica accettano parametri stringa e restituiscono valori stringa, ma è possibile utilizzare parametri numerici decimali e fare affidamento sull'interprete PHP per eseguire correttamente la conversione del tipo. In altre parole, entrambe le chiamate DecBin("1234") e DecBin(1234) producono lo stesso risultato.

Esponenti e logaritmi

Il linguaggio PHP include funzioni esponenziali e logaritmiche standard di due varietà: lavorare in base 10 e base e (mostrate nella tabella).

PHP fornisce la funzione exp() per elevare e alla potenza specificata, ma non ha una funzione a un parametro che possa elevare alla potenza specificata 10. Tuttavia, puoi invece utilizzare la funzione pow() con due parametri, specificando 10 come primo parametro.

Puoi verificare che le funzioni esponenziali e logaritmiche con la stessa base sono inverse tra loro verificando l'identità dei risultati ottenuti in questo modo:

Codice PHP $prova_449 = 449,0; $test_449 = pow(10, exp(log(log10($test_449)))); echo "test_449 = $test_449"; // test_449 = 449

Funzioni trigonometriche

Il linguaggio PHP fornisce un set standard di funzioni trigonometriche di base, le cui informazioni generali sono fornite nella tabella:

Funzioni trigonometriche
Funzione Descrizione
pi() Non accetta parametri e restituisce un valore approssimativo di π (3.1415926535898). Può essere utilizzato in modo intercambiabile con la costante M_PI
peccato() Accetta un parametro numerico in radianti e restituisce il seno del parametro come numero a virgola mobile a precisione doppia
cos() Accetta un parametro numerico in radianti e restituisce il coseno del parametro come numero a virgola mobile a precisione doppia
abbronzatura() Accetta un parametro numerico in radianti e restituisce la tangente del parametro come numero a virgola mobile e precisione doppia
come in() Accetta un parametro numerico e restituisce l'arcoseno del parametro in radianti. L'input deve essere compreso tra -1 e 1 (se la funzione riceve input al di fuori di questo intervallo, produrrà un risultato NAN). I risultati vanno da -π/2 a π/2
acos() Accetta un parametro numerico e restituisce l'arcocoseno del parametro in radianti. L'input deve essere compreso tra -1 e 1 (se la funzione riceve input al di fuori di questo intervallo, produrrà un risultato NAN. I risultati sono compresi tra 0 e π
un'abbronzatura() Accetta un parametro numerico e restituisce l'arcotangente del parametro in radianti. I risultati vanno da -π/2 a π/2

Di seguito è riportato un esempio di compilazione di una tabella per il calcolo delle funzioni trigonometriche per angoli "standard":

Codice PHP function display_trigonometry($func_array, $input_array) ( // Function header echo " "; ) eco ""; // Visualizza il resto della tabella foreach($input_array as $input) ( echo " "; foreach($func_array as $func) ( echo " "; ) eco ""; ) eco "
Significato/funzione$funz
".sprintf("%.4f",$input).""; printf("%4.4f", $func($input)); echo "
"; ) display_trigonometry(array("sin", "cos", "tan"), array(0, M_PI / 6, M_PI / 3, M_PI / 2, M_PI));

Un esempio di utilizzo delle funzioni trigonometriche in PHP

Ottenere valori tangenti molto grandi (ma non infiniti) è dovuto al fatto che teoricamente i denominatori dovrebbero essere uguali a zero, ma in realtà differiscono leggermente da zero a causa di errori di arrotondamento.

Calcolo di precisione arbitraria (utilizzando le funzioni BC)

I tipi interi e a virgola mobile a doppia precisione vanno bene per la maggior parte dei problemi matematici che si presentano negli script web, ma ogni istanza del valore rappresentato da questi tipi ha una quantità fissa di memoria del computer da memorizzare, quindi ci sono limiti alla dimensione e alla precisione di questi tipi.

Naturalmente, gli intervalli esatti di questi tipi di dati possono dipendere dall'architettura del computer server, ma i valori interi possono in genere variare da -2 31 -1 a 2 31 -1 e i numeri in virgola mobile a precisione doppia possono rappresentare numeri con una precisione di circa 13-14 cifre decimali. D'altra parte, per le attività che richiedono un intervallo di rappresentazione più ampio o una maggiore precisione, PHP fornisce funzioni matematiche con precisione arbitraria(chiamate anche funzioni BC, dopo un'utilità computazionale di precisione arbitraria basata sulle funzionalità del sistema Unix).

Le funzioni di precisione arbitraria potrebbero non essere incluse nella compilazione dell'interprete PHP, specialmente se l'utente stesso ha fatto tale compilazione, perché per questo l'utente avrebbe dovuto sapere che in fase di configurazione, il flag deve essere incluso nei parametri --enable-bcmath. Per verificare se hai accesso alle funzioni specificate, prova a valutare l'espressione bcadd("1","1"). Se ricevi un messaggio di errore che indica una funzione non definita, dovrai modificare nuovamente la configurazione e ricompilare l'interprete PHP.

Le funzioni BC non usano tipi numerici a lunghezza fissa come parametri e valori restituiti, ma stringhe. Poiché le stringhe in PHP sono limitate solo dalla memoria disponibile, i numeri utilizzati nei calcoli possono essere di qualsiasi lunghezza. I calcoli fondamentali vengono eseguiti in forma decimale e per molti versi assomigliano a quelli che una persona può eseguire con carta e matita (se può agire molto rapidamente ed essere paziente). Le funzioni BC che operano su numeri interi sono precise e consentono di utilizzare tutte le cifre necessarie, mentre le funzioni che operano su numeri in virgola mobile eseguono calcoli fino al numero specificato di cifre decimali. Una panoramica delle funzioni BC è fornita nella tabella seguente:

Funzioni matematiche con precisione arbitraria (funzioni BC)
Funzione Descrizione
bcadd() Accetta due parametri stringa che rappresentano numeri e un parametro intero facoltativo con un indicatore del fattore di scala. Restituisce la somma dei primi due parametri sotto forma di stringa, con il numero di posizioni decimali nel risultato specificato dal parametro fattore di scala. Se il parametro con la designazione del fattore di scala non è specificato, viene utilizzato il fattore di scala predefinito.
bcsub() Simile a bcadd(), tranne per il fatto che restituisce il risultato della sottrazione del secondo parametro dal primo
bcmui() Simile a bcadd(), tranne per il fatto che restituisce il risultato della moltiplicazione dei suoi parametri
bcdiv() Simile a bcadd(), tranne per il fatto che restituisce il risultato della divisione del primo argomento per il secondo.
bcmod() Restituisce il modulo (resto) dalla divisione del primo parametro per il secondo. Poiché il valore restituito è di tipo intero, la funzione non accetta un parametro con una notazione del fattore di scala
bcpow() Eleva il primo parametro alla potenza specificata dal secondo parametro. Il numero di cifre decimali nel risultato è determinato dal fattore di scala, se ne viene fornito uno.
bcsqrt() Restituisce la radice quadrata del parametro con il numero di cifre decimali determinato dal valore del fattore di scala facoltativo
bcscala() Imposta il fattore di scala predefinito per le chiamate successive alla funzione BC

La maggior parte di queste funzioni accetta come ultimo parametro un fattore di scala facoltativo (intero) che specifica quante posizioni decimali dovrebbe avere il risultato. Se non viene specificato alcun parametro di questo tipo, il fattore di scala predefinito viene utilizzato come fattore di scala, che a sua volta può essere impostato chiamando la funzione bcscale(). Il valore predefinito per questo valore predefinito (ovvero il valore utilizzato se lo script non utilizza la chiamata alla funzione bcscale()) può essere impostato anche nel file di inizializzazione php.ini.

Di seguito è riportato un esempio di utilizzo di una funzione di precisione arbitraria per eseguire esattamente operazioni aritmetiche su numeri interi. Eseguendo il seguente codice:

Codice PHP per ($x = 1; $x< 25; $x++) { echo "$x$x= ".bcpow($x, $x)."
"; }
Calcolo preciso delle quantità astronomiche utilizzando le funzioni BC

Se per questi calcoli fosse stato utilizzato il normale tipo intero PHP, l'overflow dell'intero si sarebbe verificato molto prima della fine del calcolo, quindi il resto del ciclo avrebbe dovuto eseguire i calcoli per ottenere un numero approssimativo in virgola mobile.

Array Elaborazione della forma 1 2 3 4 5 6 7 8 9 10
Sostieni il progetto - condividi il link, grazie!
Leggi anche
Pillole per l'interruzione precoce della gravidanza senza prescrizioni: un elenco con i prezzi Quali pillole si liberano della gravidanza Pillole per l'interruzione precoce della gravidanza senza prescrizioni: un elenco con i prezzi Quali pillole si liberano della gravidanza Geniali invenzioni dei fratelli Wright Geniali invenzioni dei fratelli Wright Passaggio di STALKER Folk hodgepodge: una guida a missioni e cache Passaggio di STALKER Folk hodgepodge: una guida a missioni e cache