PHP: rekenkundige operatoren. Voorvoegselvorm van verhoging

Bewerkingen met PHP-variabelen (operatoren)

Er zijn verschillende groepen voor de uitvoering.

Een operator is iets dat bestaat uit een of meer waarden (expressies in programmeerjargon) die kunnen worden geëvalueerd als een nieuwe waarde (het hele construct kan dus als een expressie worden beschouwd). Hieruit volgt dat functies of andere constructies die een waarde retourneren (bijvoorbeeld afdrukken()) zijn operatoren, in tegenstelling tot alle andere taalconstructies (bijvoorbeeld echo()), die niets teruggeeft.

Rekenkundige bewerkingen in PHP

Weet je nog de basisprincipes van rekenen op school? De hieronder beschreven operators werken op dezelfde manier.

De delingsoperator ("/") retourneert altijd een reëel type, zelfs als beide waarden gehele getallen zijn (of tekenreeksen die naar gehele getallen worden omgezet). Anders zal het resultaat fractioneel zijn.

De bewerking voor het berekenen van de rest van de verdeling " % " werkt alleen met hele getallen, dus toepassing ervan op breuken kan ongewenste resultaten opleveren.

Het is mogelijk om haakjes te gebruiken. De voorrang van bepaalde wiskundige bewerkingen boven andere en de verandering in prioriteiten bij het gebruik van haakjes in rekenkundige uitdrukkingen volgen de gebruikelijke regels van de wiskunde.

Verhogings- en verlagingsbewerkingen

PHP ondersteunt, net als C, operatoren voor het verhogen en verlagen van voorvoegsels en postfixes.

Operators voor het verhogen en verlagen van postfix

Net als in C verhogen of verlagen deze operators de waarde van een variabele, en retourneren ze in een expressie de waarde van de variabele $ een vóór de verandering. Bijvoorbeeld:

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

Zoals je kunt zien, eerst de variabele $b waarde toegewezen aan variabele $ een, en pas toen werd de laatste verhoogd. Dit is echter de expressie waarvan de waarde aan de variabele is toegewezen $b, kan moeilijker zijn - in ieder geval verhogen $ een zal pas gebeuren nadat het is berekend.

Operatoren voor het verhogen en verlagen van prefixen

Er zijn ook operatoren voor verhogen en verlagen, die worden opgegeven in plaats van achter de naam van de variabele. Dienovereenkomstig retourneren ze de waarde van de variabele na de wijziging. Voorbeeld:

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

In de praktijk worden ophoog- en afbouwbewerkingen zeer vaak gebruikt. Ze komen bijvoorbeeld in vrijwel elke cyclus voor voor .

echo "

Postfix-toename

" ;
$een = 5;
echo "Moet 5 zijn: " . $a++ . "
\N" ;

\N" ;

Echo "

Voorvoegselverhoging

" ;
$een = 5;
echo "Moet 6 zijn: " . ++ $een. "
\N" ;
echo "Moet 6 zijn: " . $ een. "
\N" ;

Echo "

Postfix-verlaging

" ;
$een = 5;
echo "Moet 5 zijn: " . $een -- . "
\N" ;

\N" ;

Echo "

Voorvoegsel verlagen

" ;
$een = 5;
echo "Moet 4 zijn: " . -- $een. "
\N" ;
echo "Moet 4 zijn: " . $ een. "
\N" ;
?>

String-bewerkingen

PHP heeft twee operators voor het werken met strings. De eerste is de aaneenschakelingsoperator ("."), die de aaneenschakeling van de linker- en rechterargumenten retourneert. De tweede is een toewijzingsoperator met aaneenschakeling, die het rechterargument aan het linker toevoegt. Laten we een specifiek voorbeeld geven:

$a = "Hallo" ;
$b = $een. "Wereld!" ; // $b bevat de tekenreeks "Hallo wereld!"

$a = "Hallo" ;
$a .= "Wereld!" ; // $a bevat de tekenreeks "Hallo wereld!"
?>

Bitsgewijze bewerkingen

Deze bewerkingen zijn ontworpen om groepen bits in een gehele variabele te bedienen (instellen/uitschakelen/controleren). De bits van een geheel getal zijn niets meer dan individuele cijfers van hetzelfde getal geschreven in het binaire getalsysteem. In binair getal zou het getal 12 er bijvoorbeeld uitzien als 1100 en 2 als 10, dus de uitdrukking 12|2 zal ons het getal 14 teruggeven (1110 in binaire notatie). Als een variabele geen geheel getal is, dan is dat wel het geval
eerst afgerond, waarna de volgende operatoren erop worden toegepast.

Om één getal weer te geven worden 32 bits gebruikt:

  • 0000 0000 0000 0000 0000 0000 0000 0000 is nul;
  • 0000 0000 0000 0000 0000 0000 0000 0001 is 1;
  • 0000 0000 0000 0000 0000 0000 0000 0010 is 2;
  • 0000 0000 0000 0000 0000 0000 0000 0011 is 3;
  • 0000 0000 0000 0000 0000 0000 0000 0100 is 4;
  • 0000 0000 0000 0000 0000 0000 0000 0101 is 5;
  • 0000 0000 0000 0000 0000 0000 0000 1111 is 15;

Bitwise-operatoren:

Voorbeeld Naam Resultaat
$a & $b Bitsgewijze "en" Alleen de bits die zowel in $a als in $b zijn ingesteld, worden ingesteld.
$een | $b Bitsgewijze "of" De bits die in $a of $b zijn ingesteld, worden ingesteld.
$a^$b Exclusief of Alleen de bits die zijn ingesteld in alleen $a of alleen $b worden ingesteld
~$a Negatie De bits die niet in $a zijn ingesteld, worden wel ingesteld, en omgekeerd.
$ een<< $b Schakel naar links Alle bits van variabele $a worden $b posities naar links verschoven (elke positie impliceert een "vermenigvuldigen met 2")
$a >> $b Schakel naar rechts Alle bits van variabele $a worden $b posities naar rechts verschoven (elke positie impliceert "delen door 2")

Vergelijkingsoperaties

Met vergelijkingsoperatoren kunt u, zoals hun naam al doet vermoeden, twee waarden vergelijken.

Dit zijn op hun eigen manier unieke bewerkingen omdat ze, ongeacht het type argumenten, altijd een van de volgende twee dingen retourneren: vals of WAAR. Vergelijkingsbewerkingen vergelijken twee waarden met elkaar en retourneren, als de voorwaarde waar is, WAAR, En indien niet - vals.

PHP staat alleen toe dat scalaire variabelen worden vergeleken. Arrays en objecten kunnen in PHP niet met elkaar worden vergeleken. Ze kunnen niet eens op gelijkheid worden vergeleken (met behulp van de operator ==), maar PHP geeft geen waarschuwing bij het uitvoeren van een dergelijke bewerking. Dus ik heb me ooit afgevraagd waarom twee totaal verschillende arrays worden gebruikt bij het vergelijken ervan == plotseling hetzelfde blijken te zijn, onthoud dat vóór de vergelijking beide operanden naar een woord worden omgezet reeks, die vervolgens wordt vergeleken.

Zie Arrayvergelijking voor details.

Vergelijkingsoperatoren:

Voorbeeld Naam Resultaat
$a == $b Gelijk aan WAAR als $a gelijk is aan $b.
$a === $b Identiek gelijk WAAR als $a gelijk is aan $b en hetzelfde type heeft. (Toegevoegd in PHP 4)
$a != $b Niet gelijk WAAR als $a niet gelijk is aan $b.
$ een<>$b Niet gelijk WAAR als $a niet gelijk is aan $b.
$a !== $b Identiek is niet gelijk WAAR als $a niet gelijk is aan $b of als ze van verschillende typen zijn (Toegevoegd in PHP 4)
$ een< $b Minder WAAR als $a strikt kleiner is dan $b.
$a > $b Meer WAAR als $a strikt groter is dan $b.
$ een<= $b Minder of gelijk WAAR als $a kleiner is dan of gelijk is aan $b.
$a >= $b Meer of gelijk WAAR als $a groter is dan of gelijk is aan $b.

Logische bewerkingen

Logische operatoren zijn exclusief ontworpen voor het werken met Booleaanse expressies en retourneren ook vals of WAAR.

Hier is een tabel met logische PHP-operatoren:

Opgemerkt moet worden dat de evaluatie van logische expressies die dergelijke operatoren bevatten altijd van links naar rechts verloopt, en als het resultaat al duidelijk is (bijvoorbeeld vals&&iets geeft altijd vals), worden de berekeningen beëindigd, zelfs als de expressie functieaanroepen bevat. In de operator $logic = 0&&(time()>100); standaard functie tijd() zal nooit gebeld worden.

Wees voorzichtig met logische bewerkingen - vergeet karakterverdubbeling niet. Houd er rekening mee dat bijvoorbeeld | En || - twee totaal verschillende operators, waarvan er één potentieel elk nummer kan retourneren, en de tweede alleen vals En WAAR.

De operators verhogen (++) en verlagen (--) werken niet met Booleaanse variabelen.

Equivalentie-operatoren

In PHP is er vanaf PHP4 een identieke vergelijkingsoperator: een drievoudig gelijkteken === ,
of de cheque-operator. PHP is redelijk tolerant als tekenreeksen impliciet worden omgezet in getallen, en omgekeerd.
De volgende code zal bijvoorbeeld afdrukken dat de waarden van de variabelen gelijk zijn:

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

En dit ondanks het feit dat de variabele $ een vertegenwoordigt een getal en $b- lijn. Laten we nu eens naar een iets ander voorbeeld kijken:

$a=0; // nul
$b=""; // lege regel
if($a==$b) echo "a en b zijn gelijk"; // Afdrukken "a en b zijn gelijk"

Hoewel $ een En $b duidelijk niet gelijk zijn, zelfs in de gebruikelijke zin van het woord, zal het script verklaren dat ze hetzelfde zijn. Waarom gebeurt dit? Het punt is dat als een van de operanden van een logische operator als een getal kan worden geïnterpreteerd, beide operanden als getallen worden behandeld. In dit geval verandert de lege regel in 0 , die vervolgens wordt vergeleken met nul. Het is niet verwonderlijk dat de exploitant echo werken.
Het probleem wordt opgelost door de equivalentieoperator === (drievoudige gelijkheid). Het vergelijkt niet alleen twee uitdrukkingen, maar ook hun typen. Laten we ons voorbeeld herschrijven met deze operator.

Alle elementaire wiskundige bewerkingen zijn beschikbaar in PHP. Zowel gehele getallen als reële getallen kunnen als operanden worden gebruikt.

De tabel toont een lijst met rekenkundige operatoren:
ExploitantTekenBeschrijving
Toevoeging + Optelling van twee waarden
Aftrekken - De ene waarde van de andere aftrekken
Vermenigvuldiging * Twee waarden vermenigvuldigen
Divisie / De ene waarde delen door de andere
Het verkrijgen van de rest van een divisie % De ene waarde delen door de andere en de rest teruggeven (modulodeling)
Verhogen ++ Afkorting voor het verhogen van een getal met één
Verlagen -- Afkorting voor het verlagen van een getal met één
Unaire ontkenning - Een positief getal in een negatief getal veranderen, of een negatief getal in een positief getal

Operatoren voor aftrekken, vermenigvuldigen, delen, modulo en optellen

De operatoren aftrekken, vermenigvuldigen, delen, modulo en optellen worden op dezelfde manier gebruikt als in de wiskunde. Hier is het de moeite waard om aandacht te besteden aan de divisie- en modulo-operatoren.

De delingsoperator (" / ") retourneert een getal met drijvende komma, tenzij beide waarden gehele getallen zijn (of tekenreeksen die worden geconverteerd naar gehele getallen) die worden gedeeld door een geheel getal. In dat geval retourneert het een geheel getal.

resultaat2 = $resultaat2
"; echo "resultaat3 = $resultaat3
resultaat4 = $resultaat4"; ?>

Bij modulodeling worden de operanden omgezet in gehele getallen (waarbij het fractionele deel wordt verwijderd) voordat de bewerking begint. Het resultaat van de deling restbewerking % zal hetzelfde teken hebben als het deeltal:

Unaire ontkenning

De unaire ontkenningsoperator wordt aangegeven met het teken "-", en keert de betekenis van zijn enige operand om:

In dit geval zijn de haakjes niet nodig omdat unaire ontkenning de hoogste prioriteit heeft, maar ze helpen de code zo te organiseren dat het duidelijk is dat de getallen -5 en 4 worden opgeteld.

Verhogen

De increment-operator wordt aangegeven met het ++-teken en kan aan weerszijden van de operand worden geplaatst waarop deze werkt. Het verhoogt deze waarde met één, net zoals het toevoegen van één aan een waarde. Het werkelijke resultaat hangt af van het feit of de operator vóór of na de operand waarmee deze is toegepast, is toegepast. Deze operator wordt vaak gebruikt bij variabelen, en vaak gebeurt dit binnen lussen (lussen worden later besproken).

Voorvoegselvorm van verhoging

Voorvoegselformulier- dit is wanneer de increment-operator vóór de operand wordt geplaatst, deze vorm van notatie betekent dat de increment eerst wordt uitgevoerd: het verhoogt de waarde van de operand met één en pas daarna wordt de rest van de instructie uitgevoerd:

Postfix-vorm van verhoging

Postfix-formulier is iets anders geschreven - de toename bevindt zich in dit geval na de operand. In postfix-notatie retourneert het eerste gebruik van de operand de huidige waarde, pas daarna wordt de waarde met één verhoogd:

Verlagen

De operator voor verlagen wordt aangegeven met het teken --, en in tegenstelling tot de operator voor verhogen wordt de waarde van de operand met één verlaagd in plaats van verhoogd. Decrement maakt ook prefix- en postfix-notatie mogelijk:

Voor zover ik het begrijp, bleek de beschrijving van de basismogelijkheden van SQL, waarmee ik onze cursus een paar lessen geleden enigszins onderbrak, niet overbodig.

Vandaag wil ik opnieuw een beetje afwijken van de ‘partijkoers’ en over structuren praten. Maar niet SQL, maar PHP zelf. Dit zal je helpen de programmaoverzichten gemakkelijker te lezen, en ik zal de daaropvolgende functies beknopter kunnen schrijven zonder bang te hoeven zijn dat je mij niet zult begrijpen.

Wees niet ongerust, dit betekent helemaal niet dat ik doorga met het schrijven van alles wat ingewikkeld en vaag is. Nee, zoiets niet. Ik wil alleen dat je begrijpt dat PHP niet BASIC is, waar je alleen kunt schrijven zoals je kunt schrijven. En niets anders. Goed gezegd, heb je begrepen wat je schreef, Kurepin?! Ik heb het, ik heb het...

Ontmoet - punt.

Punt "." je weet het al, het voegt strings samen. Plus "+" voegt cijfers toe, en een punt combineert lijnen.
$a1="100";
$a2="200"
Wat gebeurt er als je foldt? $a1 En $a2? Hoe zeg je dit...
$a1+$a2=300
$a1.$a2="100200"
...en vergeet het nooit.

Hier is een andere manier om optelling te schrijven.

Laten we aannemen dat we een soort complexe reeks uit verschillende fragmenten samenstellen. We kunnen als volgt nieuwe gegevens aan het einde van onze variabele toevoegen:

$this->string_about_letters = $this->string_about_letters."een paar letters..."; $this->string_about_letters = $this->string_about_letters." nog een paar letters..."; $this->string_about_letters = $this->string_about_letters." en nog een paar letters..."; $this->string_about_letters = $this->string_about_letters." nog een paar letters...";
Een beetje lang, nietwaar? Het herhalen van een lange variabele staat in de weg $this->string_about_letters. Daarom zullen we het anders opnemen:
$this->string_about_letters .= "meerdere letters..."; $this->string_about_letters .= "nog een paar letters..."; $this->string_about_letters .= "en nog een paar letters..."; $this->string_about_letters .= "nog een paar letters...";
Handiger toch?

Hetzelfde geldt voor wiskundige optelling:
$abc+=1;
Voeg 1 toe aan de inhoud van een variabele $abc.

Hoe kun je er anders één toevoegen? Meestal, volgens S-shno:

$abc++; of +$abc;

Deze twee uitdrukkingen worden vaak gebruikt in cyclische constructen. En niet op zichzelf, maar in een complexere uitdrukking.
Het verschil tussen deze twee uitdrukkingen is dat in het eerste geval rekening wordt gehouden met de waarde van de variabele in de uitdrukking, en vervolgens wordt er één toegevoegd, en in het tweede geval is het tegenovergestelde waar: eerst wordt de waarde van de variabele verhoogd. en vervolgens wordt de resulterende waarde in de expressie gebruikt. Een voorbeeld zal het duidelijk maken:
$a=1;
echo $a++;
echo +$a;
Eerst echo zal voor ons “1” afdrukken, en de tweede afdrukken?.. maar dat klopt niet! Niet 2 het wordt afgedrukt, en "3". Waarom? Zoek het zelf uit.

Vandaag wil ik ook een stukje code voor je opsplitsen dat we vaak in ons programma zullen gebruiken. En in het algemeen in elk programma waarin gegevens uit een SQL-database worden gehaald.

We hebben het natuurlijk over het verkrijgen van gegevens via selecteren-A.

U weet al hoe u de database moet doorzoeken, maar we hebben nog niet echt gesproken over het parseren van de ontvangen gegevens. Ondertussen kan dit op verschillende manieren worden gedaan.

Laten we beginnen met een voorbeeld. Stel dat we titels selecteren van videofilms die in 2000 zijn uitgebracht uit de videocassettedatabase en deze in tabelvorm willen afdrukken (uiteraard met de cassette-ID).

Je zou de procedure dus als volgt kunnen regelen (je vindt iets soortgelijks in veel schoolboeken):

$this->sql_query="selecteer * uit film waarbij f_date tussen "2000-01-01 00:00:00" en "2000-12-31 23:59:59 gesorteerd op f_id""; $dit->sql_execute(); $str=" "; $row_count=mysql_num_rows($this->sql_res); for($i=0;$isql_res); $str=$str." \n"; ) $str=$str."
".$film["f_id"]."".$film["f_name"]."
";
Laat het me uitleggen.

We doen een verzoek aan de database (let trouwens op de nieuwe voorwaarde in het verzoek: tussen datum en datum, dit formulier wordt vaak gebruikt om een ​​datumbereik aan te geven).

We initiëren een tekstvariabele om er HTML-code in in te voeren door het eerste tekstfragment toe te voegen: het begin van de tabel.

Vervolgens openen we een lus met een aantal iteraties dat gelijk is aan het aantal rijen dat uit de query is opgehaald.

In de body van de lus extraheren we de volgende regel uit ons verzoek in een arrayvariabele $ film. Functie mysql_fetch_array ordent gegevens in associatieve array, waarbij veldnamen uit de tabel als sleutels worden gebruikt.


    Een associatieve array is hetzelfde als een gewone (genummerde) array; alleen tekenreeksen in plaats van cijfers worden gebruikt als namen voor de cellen. En je zou dienovereenkomstig toegang moeten krijgen tot de cellen van zo'n array: $abc["first"], $abc["mama"]...
Vervolgens voegen we de volgende rij van de tabel toe aan onze tekstvariabele, met behulp van de gegevens uit de database. Om toegang te krijgen tot gegevens worden, zoals u kunt zien, tabelveldnamen gebruikt. Dit is een eigenschap van de functie mysql_fetch_array, zoals ik al zei.

    Let vooral op: u heeft geen toegang tot cellen van associatieve arrays in tekstreeksen! Het is noodzakelijk om de lijn te doorbreken en de waarden te "plakken" met behulp van punten (.), zoals weergegeven.
De cyclus wordt het vereiste aantal keren herhaald, waarna we sluiten $str de laatste html-tag. Klaar.

Maar is dit niet allemaal te omslachtig? Volgens mij heel erg. Ik stel voor om dit allemaal anders op te schrijven: alles is hetzelfde, maar korter.