Esempio di divisione delle operazioni matematiche in Php. Operazioni in PHP

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

È improbabile che i programmatori che devono eseguire calcoli numerici, scientifici o statistici sensibili considerino un linguaggio di scripting web come un candidato accettabile per questo ruolo. Ma, nonostante quanto sopra, il linguaggio PHP offre un eccellente set di funzioni che forniscono una soluzione completa alla maggior parte dei problemi matematici che sorgono durante il processo di esecuzione degli script per il web. Inoltre, PHP fornisce alcune funzionalità più avanzate, come l'aritmetica di precisione arbitraria, le librerie di hashing e le librerie crittografiche.

Gli sviluppatori del linguaggio PHP hanno adottato un approccio ben fondato e non hanno fatto alcun tentativo di reinventare le ruote progettate per questo scopo. Il fatto è che molte delle funzioni matematiche più fondamentali utilizzate in PHP sono semplicemente dei wrapper attorno alle loro controparti C.

Operazioni matematiche

La maggior parte della matematica in PHP viene eseguita sotto forma di funzioni integrate anziché di operazioni. Oltre agli operatori di confronto, PHP offre cinque semplici operatori aritmetici, nonché alcuni operatori di scelta rapida che consentono di costruire espressioni di incremento, decremento e assegnazione più brevi.

Operazioni aritmetiche

Le cinque operazioni aritmetiche di base includono quelle comunemente implementate in qualsiasi calcolatrice a quattro funzioni, più il modulo (%). Breve descrizione operazioni aritmetiche mostrato nella tabella:

Operazioni aritmetiche
Operazione Descrizione
+ Restituisce la somma dei valori dei suoi due operandi
- Se sono presenti due operandi, il valore dell'operando di destra viene sottratto dal valore di quello di sinistra. Se è presente solo un operando a destra, l'operazione restituisce il valore di quell'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 di sinistra per il valore dell'operando di destra
% Restituisce il resto di un numero intero diviso per il valore dell'operando di sinistra per il valore assoluto dell'operando di destra

Quando si utilizzano le prime tre operazioni aritmetiche sopra descritte (+, -, *) in un programma, è necessario tenere presente che quando si eseguono queste operazioni, la propagazione del tipo avviene da valori a virgola mobile a precisione doppia a valori interi. Ciò significa che se entrambi gli operandi di un'operazione sono 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. numero. La stessa propagazione del tipo si verifica quando si esegue un'operazione di divisione; inoltre, questo si verifica effetto aggiuntivo, che il risultato diventa un numero a virgola mobile a precisione doppia a meno che la divisione non venga eseguita senza resto (interamente).

L'operazione modulo (%) in PHP accetta operandi interi e quando questa operazione viene applicata a numeri a 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 deriva da C, e i programmatori C sono noti per il loro amore per la brevità e ne sono orgogliosi. Gli operatori di incremento e decremento, presi dal linguaggio C, consentono di rappresentare in modo più conciso espressioni come $count = $count + 1, che di solito si trovano abbastanza spesso nei programmi.

L'operatore di incremento (++) viene utilizzato per aggiungere uno al valore della variabile interessata dall'operazione, mentre l'operatore di decremento (--) sottrae uno dal valore della variabile.

Ognuna di queste due operazioni ha due varietà: suffisso(in questa forma il segno dell'operazione è posto subito dopo la variabile interessata dall'operazione) e prefisso(in questa forma il segno dell'operazione è posto immediatamente prima della variabile a cui si applica l'operazione). Entrambe le varietà hanno lo stesso per effetto associato alla modifica del valore di una variabile, ma le operazioni su suffisso e prefisso restituiscono significati diversi se usati come espressioni. L'operazione sul suffisso funziona in modo che il valore della variabile venga modificato dopo che viene restituito il valore dell'espressione, mentre l'operazione sul prefisso funziona in modo che il valore venga prima modificato e quindi il nuovo valore venga restituito alla variabile. Questa differenza può essere rilevata utilizzando gli operatori di decremento e incremento negli operatori di assegnazione:

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

Le seguenti istruzioni producono il seguente output nella finestra del browser:

Operazioni di incremento

In questo esempio, l'operatore $risultato = $count++ è completamente equivalente agli operatori:

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

Oltre a ciò, l'operatore $risultato = ++$count è equivalente ai seguenti operatori:

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

Operatori di assegnazione

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

Codice PHP $conteggio = $conteggio * 3;

può essere abbreviato come

Codice PHP $count *= 3;

Funzioni matematiche semplici

Il passo successivo per rendere un programma più complesso di uno che utilizza solo operazioni aritmetiche è utilizzare tutti i tipi di funzioni. Le funzioni ti consentono di eseguire attività come la conversione da un tipo di numero a un altro (vedi l'articolo Tipi di dati) e la ricerca del numero minimo o massimo in un insieme di numeri. La tabella seguente mostra semplici funzioni matematiche:

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

Ad esempio, il risultato della seguente espressione è 3 perché anche il valore di ciascuna espressione di 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

Il linguaggio PHP utilizza due generatori di numeri casuali (chiamati rispettivamente utilizzando le funzioni Rand() E mt_rand()). A ciascuno di questi generatori sono associate tre funzioni con lo stesso scopo: la funzione di impostazione del valore iniziale ( sabbia() E mt_srand()), la funzione stessa per ottenere un numero casuale e la funzione che campiona l'intero più grande che può essere restituito dal generatore (( getrandmax() E mt_getrandmax())). Le funzioni getrandmax() e mt_getrandmax() restituiscono un valore il numero più grande, che può essere restituito da rand() o mt_rand(), sulle piattaforme Windows questo valore è limitato a 32768.

La scelta della specifica funzione di generazione di numeri pseudocasuali utilizzata nella funzione rand() può dipendere da quali librerie è 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 operativa per la funzione mt_rand() afferma che questa funzione è anche più veloce e " più random" (da un punto di vista crittografico) rispetto a rand(). Non abbiamo motivo di dubitare della verità di queste affermazioni, motivo per cui preferiamo utilizzare la funzione mt_rand() anziché rand().

Quando si utilizzano alcune versioni di PHP su alcune piattaforme, sembra che le funzioni rand() e mt_rand() producano numeri casuali apparentemente ragionevoli, anche senza prima impostare un seed. Ma non ci si dovrebbe fidare di una simile impressione. In primo luogo, i programmi che utilizzano funzioni per generare numeri casuali senza specificare un valore iniziale non possono essere facilmente trasferiti su altre piattaforme e, in secondo luogo, il funzionamento affidabile di queste funzioni senza specificare un valore iniziale non è garantito.

Il modo tipico per impostare il valore seed per qualsiasi generatore di numeri casuali di PHP (usando la funzione mt_srand() o srand()) è il seguente:

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

Questa istruzione specifica il valore iniziale del generatore, pari alla quantità microsecondi trascorsi fino a oggi dal conteggio dell'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 dei parametri alla funzione.) Raccomandiamo al lettore di inserire l'operatore di inizializzazione specificato anche se lo scopo di questo operatore non gli è del tutto chiaro; Posizionando semplicemente questa istruzione su ogni pagina PHP, solo una volta, prima di utilizzare la corrispondente funzione mt_rand() o rand(), si garantirà che il punto di partenza cambi e quindi produca ogni volta una sequenza casuale diversa.

Questo particolare metodo per impostare il valore iniziale è stato profondamente pensato da quegli specialisti che comprendono appieno tutte le sfumature della generazione di numeri pseudo-casuali, quindi, molto probabilmente, rimarrà per sempre migliore di qualsiasi tentativo da parte di qualsiasi singolo programmatore di inventare qualcosa 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 numero a virgola mobile corrispondente (ad esempio, un numero compreso nell'intervallo da 0,0 a 1,0 compreso) utilizzando un'espressione come rand () / getrandmax(). L'intervallo specificato può quindi essere ridimensionato e spostato secondo necessità. Di seguito è riportato un esempio:

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

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

Costanti matematiche

Nella versione PHP 4.0, nella documentazione era descritta solo una costante matematica: M_PI (il valore di π, rappresentato come un numero in virgola mobile a precisione doppia). E a partire da PHP 4.0.2 sono state introdotte molte nuove costanti. La maggior parte di queste nuove costanti si riferivano a π (o ai suoi multipli), e (o ai suoi multipli) e alle radici quadrate; inoltre, alcune costanti appartenevano ad altri tipi. Ma nelle versioni successive, per una serie di ragioni, 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 π/2
M_PI_4 π/4
M_1_PI 1/π
M_2_PI 2/π
M_2_SQRTPI 2 / quadrato(π)
ME e
M_SQRT2 quadrato(2)
M_SQRT1_2 1 / quadrato(2)
M_LOG2E log2(e)
M_LOG10E ceppo(e)
M_LN2 loggia(2)
M_LN10 loggia(10)

Controllo del formato del numero

Il linguaggio PHP mette a disposizione una serie di funzioni che permettono di verificare la corretta rappresentazione dei numeri. Sebbene PHP non abbia un controllo rigoroso del tipo, si consiglia di implementare alcuni di questi controlli nel codice quando necessario per poter prevedere le caratteristiche dei risultati ricevuti e anche per selezionare miglior modo la loro elaborazione.

Innanzitutto e soprattutto semplice controlloè usare la funzione è_numerico(). Come con la maggior parte degli altri test simili, la funzione is_numeric restituisce un risultato booleano: true se il parametro passato è un dato numerico di qualsiasi tipo (con segno o senza segno, intero o in virgola mobile) o un'espressione matematica che restituisce un valore numerico valido.

Utilizzo delle funzioni è_int() E is_float Puoi determinare se un numero è un numero intero o una frazione. Altri due controlli sono un po' più complessi: Functions è_finito() E è_infinito() permettono di eseguire esattamente i test che i loro nomi indicano (indipendentemente dal fatto che il numero sia finito o infinito). Ma, a rigor di termini, l’intervallo di valori su cui si estendono queste funzioni non può includere l’infinito reale (e si può anche verificare se il numero ha infinito? Grande importanza?). 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); // vero è_numerico(25 - 6); // vero is_numeric("25"); // vero is_numeric("25 - 6"); // falso è_int(4); // vero è_int(4.2); // falso è_int("4"); // false - questo controllo è più rigoroso del controllo utilizzando la funzione is_numeric() is_float(4); // false is_float(4.0); // vero is_float(M_PI); // VERO

Conversione di sistemi numerici

Per impostazione predefinita in PHP, per la conversione diretta e inversa di valori numerici da rappresentanza esterna internamente viene utilizzata la base 10. Puoi anche dire all'interprete PHP di utilizzare numeri ottali in base 8 (anteponendo al numero uno 0 iniziale) o numeri esadecimali in base 16 (per questo devi inserire il prefisso 0x prima del numero).

Naturalmente, dopo aver convertito i numeri dalla rappresentazione esterna a quella interna, questi vengono archiviati in memoria in formato binario e tutti i calcoli aritmetici e matematici di base vengono eseguiti nel formato binario. sistema operativo base 2. Inoltre, il linguaggio PHP fornisce una serie di funzioni per convertire i numeri da una base all'altra. informazioni generali Queste funzioni sono mostrate nella tabella seguente:

Funzioni di conversione del sistema numerico
Funzione Descrizione
BinDec() Accetta un singolo argomento di stringa che sia un intero binario (numero in base 2) e restituisce la rappresentazione di stringa di quel numero in base 10
DecBin() Simile a BinDec(), ma converte dalla base 10 alla base 2
ottdic() Simile a BinDec(), ma converte dalla base 8 alla base 10
dicottobre() Simile a BinDec(), ma converte dalla base 10 alla base 8
Dec.Esa() Simile a BinDec(), ma converte dalla base 16 alla base 10
DecHex() Simile a BinDec(), ma converte dalla base 10 alla base 16
base_convert() Richiede un parametro stringa (che rappresenta il numero intero da convertire) e due parametri interi (la base e la base desiderata). Restituisce una stringa che rappresenta il numero convertito. In questa riga sono rappresentati i numeri maggiori di 9 (da 10 a 35). simboli a-z. Sia la base originale che quella desiderata devono essere comprese nell'intervallo 2-36

Tutte le funzioni di conversione del sistema numerico sono funzioni scopo speciale, convertendo 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.

Tieni presente che tutte le funzioni di conversione dei numeri accettano parametri di stringa e restituiscono valori di stringa, ma puoi utilizzare parametri numerici decimali e fare affidamento su corretta esecuzione conversioni di tipo da parte dell'interprete PHP. 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 il numero e alla potenza specificata, ma non esiste una funzione con un solo parametro che possa elevare alla potenza specificata la potenza di 10. Tuttavia, puoi utilizzare la funzione pow() con due parametri invece, dando 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 "prova_449 = $prova_449"; // prova_449 = 449

Funzioni trigonometriche

Il linguaggio PHP fornisce un set standard di basic funzioni trigonometriche, le cui informazioni generali sono riportate 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 a precisione doppia
come in() Accetta un parametro numerico e restituisce l'arcoseno del parametro in radianti. Gli input devono essere compresi tra -1 e 1 (la funzione che riceve input al di fuori di questo intervallo genera un risultato NAN). I risultati vanno da -π/2 a π/2
acos() Accetta un parametro numerico e restituisce l'arcocoseno del parametro in radianti. Gli input devono essere compresi nell'intervallo da -1 a 1 (la funzione che riceve input al di fuori di questo intervallo genera un risultato NAN. I risultati sono compresi nell'intervallo da 0 a π
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) ( // Intestazione funzione echo " "; ) eco ""; // Stampa il resto della tabella foreach($input_array come $input) ( echo " "; foreach($funzione_array as $funzione) ( echo " "; ) eco ""; ) eco "
Significato/funzione$funz
".sprintf("%.4f",$input).""; printf("%4.4f", $funzione($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

Il motivo per ottenere valori tangenti molto grandi (ma non infiniti) è che i denominatori dovrebbero teoricamente essere zero, ma in realtà sono leggermente diversi da zero a causa di errori di arrotondamento.

Calcolo di precisione arbitraria (utilizzando le funzioni BC)

I tipi a virgola mobile interi e a doppia precisione sono perfettamente adeguati per la maggior parte dei problemi matematici incontrati nello scripting web, ma ogni istanza del valore rappresentato da questi tipi richiede una quantità fissa di memoria del computer, quindi la dimensione e la precisione della rappresentazione numerica di questi tipi impongono inevitabilmente delle limitazioni.

Naturalmente, gli intervalli di valori 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 a virgola mobile a doppia precisione possono rappresentano numeri con una precisione di circa 13-14 cifre decimali. D'altra parte, per risolvere problemi che richiedono l'uso di una gamma più ampia di rappresentazione o di maggiore precisione, PHP fornisce funzioni matematiche con precisione arbitraria(chiamate anche funzioni BC, dal nome dell'utilità di calcolo a precisione arbitraria basata su Unix).

Può darsi che funzioni di precisione arbitraria non siano incluse nella compilazione dell'interprete PHP, soprattutto se l'utente ha effettuato la compilazione da solo, poiché per questo l'utente dovrebbe sapere che in fase di configurazione è necessario includere una casella di controllo nel campo parametri --enable-bcmath. Per verificare se le funzioni specificate sono disponibili, provare a valutare l'espressione bcadd("1","1"). Se ricevi un messaggio di errore che indica una funzione non definita, dovrai riconfigurare l'interprete PHP e ricompilarlo.

Le funzioni BC utilizzano stringhe anziché tipi numerici a lunghezza fissa come parametri e valori restituiti. Poiché in PHP la lunghezza delle stringhe è limitata solo dalla quantità di memoria disponibile, i numeri utilizzati nei calcoli possono avere qualsiasi lunghezza. I calcoli di base vengono eseguiti in forma decimale e sono molto simili a quelli che una persona può fare con carta e matita (se riesce a lavorare molto velocemente ed è paziente). Le funzioni intere BC sono precise e consentono di utilizzare tutte le cifre necessarie, mentre le funzioni a virgola mobile eseguono calcoli accurati fino a un 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 che indica un fattore di scala. Restituisce la somma dei primi due parametri come stringa, con il numero di cifre decimali nel risultato determinato dal parametro che indica il fattore di scala. Se il parametro che indica il 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 parametro per il secondo
bcmod() Restituisce il modulo (resto) della divisione del primo parametro per il secondo. Poiché il valore restituito è un numero intero, la funzione non accetta un parametro che indica un 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 specificato
bcsqrt() ritorna Radice quadrata parametro con un numero di cifre decimali determinato dal valore del fattore di scala opzionale
bcscale() Imposta il fattore di scala predefinito per le chiamate successive alla funzione BC

La maggior parte di queste funzioni accettano come ultimo parametro un fattore di scala opzionale (un numero intero), che determina quante cifre decimali dovrebbe avere il risultato. Se questo parametro non è specificato, come fattore di scala viene utilizzato il fattore di scala predefinito, 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 chiama 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 esecuzione precisa operazioni aritmetiche su numeri interi. Eseguendo il seguente codice:

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

Se per questi calcoli venisse utilizzato il normale tipo intero PHP, l'overflow dell'intero si verificherebbe molto prima della fine del calcolo, quindi il resto del ciclo eseguirebbe calcoli per ottenere un numero in virgola mobile approssimativo.

Array Elaborazione della forma 1 2 3 4 5 6 7 8 9 10

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

Operazioni aritmetiche in php

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

\$num2 = ". $num2; //Esempio di somma: 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; //Esempio di resto della divisione: eco "
\$num1 % \$num2 = ". $num1 % $num2; //Esempio di incremento nella forma del prefisso: eco "
++\$num1 = ". ++$num1; //Ora $num1 = 11 $num1=10; //valore iniziale assegnato //Esempio di incremento nel formato del prefisso postale: eco "
\$num1++ = ". $num1++; //Ora $num1 = 11 $num1=10; //assegnato il valore originale //Un esempio di decremento nella forma del prefisso: eco "
--\$num1 = ". --$num1; $num1=10; //Un esempio di decremento nella 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:

  • sotto forma di prefisso(++ è davanti alla variabile) prima viene incrementato di uno, quindi viene stampato il risultato
  • nella forma del prefisso successivo(++ viene dopo la variabile) il risultato viene prima visualizzato e poi incrementato

Per aiutarti a capire meglio la differenza, darò un classico esempio che si trova in molti libri di testo di programmazione:

//Assegna valori alle variabili:$num1 = 10; $num2 = 7; $rez = ++$num1 + $num2; // il risultato sarà 18 eco "
\$rez = ". $rez; //Assegna $num1 al 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 - voce regolare;
  • $num1 += $num2 è una notazione abbreviata. Il risultato di queste operazioni sarà lo stesso. La notazione stenografia 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 simili. Tuttavia in questa lezione non esamineremo gli operatori condizionali, ma solo gli operatori di confronto. Tutti gli operatori di confronto sono mostrati nella tabella seguente:

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

//Assegna valori alle variabili:$num1 = 10; $num2 = 7; echo "\$num1 > \$num2 = ". ($num1 > $num2); //ottieni 1 (10 > 7 - vero) echo "\$num1 //ottieni 0 (10 //Puoi scriverlo in modo più semplice: eco "
10 // 0 eco "
20 // 0 eco "
1 == 1 = ". (1 == 1); // 1 eco "
0 == \"\" = ". (0 == ""); // 1 echo "
0 === 0 = ". (0 === 0); // 1 eco "
0 === \"\" = ". (0 === ""); // 0 echo "
vero = ". vero; // 1 eco "
false = ". false; // 0 ?>

Nota:

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

Ultimo aggiornamento: 1/11/2015

In PHP possiamo utilizzare vari operatori: aritmetici, logici, 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

    % (ottenendo il resto della divisione)

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

    ++ (incrementa/aumenta il valore di uno)

    Ad esempio, ++$a

    È importante comprendere la differenza tra le espressioni ++$ae $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 equiparato alla variabile $b. Sarebbe diverso se l'espressione fosse così: $b=$a++; . In questo caso, prima il valore della variabile $a è stato uguale alla variabile $b, quindi il valore della variabile $a è stato aumentato.

    -- (diminuisce/diminuisce il valore di uno)

    Ad esempio, --$a . Inoltre, come nel caso dell'incremento, esistono due tipi di registrazione: --$a e $a--

Operatori di assegnazione

    Uguaglia una variabile a un valore specifico: $a = 5

    Addizione seguita dall'assegnazione del risultato. Ad esempio: $a=12; $a += 5; eco $a; // uguale a 17

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

    Moltiplicazione seguita da assegnazione del risultato: $a=12; $a*= 5; eco $a; // equivale a 60

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

    Concatena le righe e assegna il risultato. Si applica a due righe. Se le variabili non memorizzano stringhe, ma, ad esempio, numeri, i loro valori vengono convertiti in stringhe e quindi viene eseguita l'operazione: $a=12; $a.= 5; eco $a; // uguale a 125 // identico a $b="12"; $b.="5"; // uguale a 125

    Ottenendo il resto della divisione e quindi assegnando il risultato: $a=12; $a%= 5; eco $a; // è uguale a 2

Operazioni di confronto

Le operazioni di confronto vengono solitamente utilizzate nelle costruzioni condizionali quando è necessario confrontare due valori e, a seconda del risultato del confronto, eseguire determinate azioni. Sono disponibili le seguenti operazioni di confronto.

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

    Anche l'operatore identità confronta due valori e, se sono uguali, restituisce vero, altrimenti restituisce falso: $a === 5

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

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

    Confronta due valori e se il primo è maggiore del secondo restituisce vero, altrimenti restituisce falso: $a > 5

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

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

    Confronta due valori e se il primo è minore o uguale al secondo restituisce vero, altrimenti restituisce falso: $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 l'operazione di uguaglianza assume due valori di tipo diverso, vengono ridotti a uno, quello che l'interprete trova ottimale. Per esempio:

Ovviamente, le variabili memorizzano valori diversi di tipo diverso. Ma se confrontati, verranno ridotti allo stesso tipo: numerico. E la variabile $a verrà ridotta al numero 22. E alla fine, entrambe le variabili saranno uguali.

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

$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"; altrimenti echo "non uguale";

Ora le variabili non saranno uguali.

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

Operazioni logiche

Le operazioni booleane vengono generalmente 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 all'operazione &&: $a == 5 e $b > 6

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

    Simile 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 è vero, restituisce falso. Ad esempio: $a=12; $b=6; if($a xor $b) echo "vero"; altrimenti 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=NULL; if($a xor $b) echo "vero"; altrimenti echo "falso";

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

Operazioni sui bit

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

    & (moltiplicazione logica)

    La moltiplicazione viene eseguita bit per bit e se entrambi gli operandi hanno valori di bit pari a 1, 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 nel sistema binario è 100 e il numero 5 è 101. Moltiplica i numeri bit per bit e ottieni (1*1, 0*0, 0 *1) = 100, ovvero il numero 4 in formato decimale.

    | (addizione logica)

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

    ~ (negazione logica)

    inverte tutti i bit: se il valore del bit è 1, allora diventa zero e viceversa. $b = 5; eco ~$b;

    X<

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

Concatenazione di stringhe

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

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

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

Operazioni con variabili PHP (operatori)

Esistono vari gruppi per l'implementazione.

Un operatore è qualcosa costituito da uno o più valori (espressioni nel gergo della programmazione) che possono essere valutati come un nuovo valore (quindi l'intero costrutto può essere considerato un'espressione). Ne consegue che le funzioni o qualsiasi altro costrutto che restituisce 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 di aritmetica? Le affermazioni seguenti funzionano allo stesso modo.

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

L'operazione di calcolo del resto della divisione " % " funziona solo con numeri interi, quindi applicarlo alle frazioni potrebbe produrre risultati indesiderati.

È possibile utilizzare le parentesi. La precedenza di alcune operazioni matematiche rispetto ad altre e il cambiamento di priorità quando si utilizzano parentesi nelle espressioni aritmetiche seguono le consuete regole della matematica.

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 in un'espressione restituiscono il valore della variabile $a prima del cambiamento. Per esempio:

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

Come puoi vedere, prima la variabile $b valore assegnato alla variabile $a, e solo allora l'ultimo è stato incrementato. Tuttavia, l'espressione il cui valore è assegnato alla variabile $b, potrebbe essere più difficile, in ogni caso, incrementare $a avverrà solo dopo che sarà stato calcolato.

Prefisso degli operatori di incremento e decremento

Esistono anche operatori di incremento e decremento, 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 vengono 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 "Deve essere 6: " . ++$a. "
\N" ;
echo "Deve essere 6: " . $a. "
\N" ;

Eco "

Decremento suffisso

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

\N" ;

Eco "

Decremento del prefisso

" ;
$a = 5;
echo "Deve essere 4: " . --$a. "
\N" ;
echo "Deve 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 è un operatore di assegnazione con concatenazione, che aggiunge l'argomento destro a quello sinistro. Facciamo un esempio specifico:

$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 sono progettate per operare (impostare/disimpostare/controllare) gruppi di bit in un'intera variabile. I bit di un intero non sono altro che singole cifre dello stesso numero scritte nel sistema numerico 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 una variabile non è un numero intero, allora lo è
prima arrotondato, quindi gli vengono applicati i seguenti operatori.

Per rappresentare un numero vengono utilizzati 32 bit:

  • 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 per bit "e" Vengono impostati solo i bit impostati sia in $a che in $b.
$a | $b Bit per bit "o" I bit impostati in $a o $b vengono impostati.
$a^$b Esclusivo o Vengono impostati solo i bit impostati solo in $a o solo in $b
~$a Negazione I bit che non sono impostati in $a vengono impostati e viceversa.
$a<< $b Spostati a sinistra Tutti i bit della variabile $a vengono spostati nelle posizioni $b a sinistra (ogni posizione implica una "moltiplicazione per 2")
$a >> $b Spostati a destra Tutti i bit della variabile $a vengono spostati nelle posizioni $b verso destra (ogni posizione implica "divisione per 2")

Operazioni di confronto

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

Queste sono operazioni uniche a modo loro, perché indipendentemente dal tipo di 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, restituirli VERO, E se no - falso.

In PHP è consentito confrontare solo variabili scalari. Array e 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 mi sono chiesto perché due array completamente diversi confrontandoli == sono improvvisamente uguali, ricorda che prima di confrontare entrambi gli operandi vengono convertiti in una parola vettore, che viene poi confrontato.

Per i dettagli vedere Confronto degli array.

Operatori di confronto:

Esempio Nome Risultato
$a == $b Equivale VERO se $a è uguale a $b.
$a === $b Identicamente uguali 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 inferiore a $b.
$a > $b Di più VERO se $a è strettamente maggiore di $b.
$a<= $b Meno o uguale VERO se $a è minore o uguale a $b.
$a >= $b Più o uguale VERO se $a è maggiore o uguale a $b.

Operazioni logiche

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

Ecco una tabella degli operatori logici PHP:

È da notare che la valutazione delle espressioni logiche contenenti tali operatori procede sempre da sinistra verso destra, e se il risultato è già ovvio (ad esempio, falso&&qualcosa dà sempre falso), i calcoli vengono terminati, anche se l'espressione contiene chiamate di funzione. Ad esempio, nell'operatore $logic = 0&&(time()>100); funzione standard tempo() non verrà mai chiamato.

Fai attenzione alle operazioni logiche: non dimenticare il raddoppio dei caratteri. Tieni presente 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 con le variabili booleane.

Operatori di equivalenza

In PHP, a partire da PHP4 esiste un operatore di confronto identico: un triplo segno di uguale === ,
o l'operatore di controllo. PHP è abbastanza tollerante nei confronti della conversione implicita delle stringhe in numeri e viceversa.
Ad esempio, il codice seguente stamperà che i valori delle variabili sono uguali:

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

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

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

Sebbene $a E $b non sono chiaramente uguali nemmeno nel senso comune del termine, lo script dichiarerà che sono uguali. Perché sta succedendo? Il punto è che se uno degli operandi di un operatore logico può essere interpretato come un numero, allora entrambi gli operandi vengono trattati come numeri. In questo caso, la riga vuota diventa 0 , che viene poi confrontato con zero. Non sorprende che l'operatore eco lavori.
Il problema è risolto dall’operatore di equivalenza === (triplice uguaglianza). Non solo confronta due espressioni, ma anche i loro tipi. Riscriviamo il nostro esempio utilizzando questo operatore.

Sostieni il progetto: condividi il link, grazie!
Leggi anche
Pillole per interrompere precocemente la gravidanza senza prescrizione medica: elenco con prezzi Quali pillole eliminano la gravidanza Pillole per interrompere precocemente la gravidanza senza prescrizione medica: elenco con prezzi Quali pillole eliminano la gravidanza Invenzioni ingegnose dei fratelli Wright Invenzioni ingegnose dei fratelli Wright Soluzione del miscuglio di STALKER People: guida alle missioni e ai nascondigli Soluzione del miscuglio di STALKER People: guida alle missioni e ai nascondigli