A statikus változó akkor is megtartja értékét, ha a függvényünk befejezte a műveletet.
A függvény újbóli meghívásakor, függvényünk azon static változó értékkel fog tovább dolgozni, melyet az előző lefutáskor a static változó felvett.
A statikus változó
- Miután a függvény befejezte feladatát, a benne használt változó megsemmisül, értéke pedig elvész.
- A változó és annak értéke továbbra is megmaradjon a két függvényhívás között, a static kulcsszót használjuk.
- Hasznos akkor is, ha megszeretnénk tudni, hogy az adott függvény hányszor futott le.
Példa
A függvényt 100 alkalommal hívjuk meg abból a célból, hogy minden alkalommal, egy-egy rekordot hívjon le egy adatbázisból.
A 100-ik alkalom után letiltjuk a rekordok lehívását.
function record_lekerdezese () {
static $szamlalo 0;
$szamlalo++;
// Ellenőrizzük számláló értéke 100 alatt van ($szamlalo < 100) akkor futtatjuk a programot.
// Ha a számláló értéke elérte vagy meghaladta a 100-at, ($szamlalo => 100) akkor: echo "Nem kell több rekord"
}
<?php $i=15; function hozzaad() { static $i; $i++; print("Függvényen belüli változó érték = $i<br />"); } print("Főprogramba lévő változó értéke = $i<br />"); hozzaad(); print("Főprogramba lévő változó értéke = $i<br />"); hozzaad(); ?> |
Eredmény a static változó esetén: Főprogramba lévő változó értéke = 15 Függvényen belüli változó érték = 1 Főprogramba lévő változó értéke = 15 Függvényen belüli változó érték = 2 |
<?php $i=15; function hozzaad() { $i++; print("Függvényen belüli változó érték = $i<br />"); } print("Főprogramba lévő változó értéke = $i<br />"); hozzaad(); print("Főprogramba lévő változó értéke = $i<br />"); hozzaad(); ?> |
Eredmény a static változó nélkül:Főprogramba lévő változó értéke = 15 Notice: Undefined variable: i in C:\Apache2.2\htdocs\xxxxx.php on line xx Függvényen belüli változó érték = 1 Főprogramba lévő változó értéke = 15 Notice: Undefined variable: i in C:\Apache2.2\htdocs\xxxxx.php on line xx Függvényen belüli változó érték = 1 |
Ha jól megfigyeljük, statikus változó nélkül, függvényünket akárhányszor is hívjuk meg, az eredmény mindig ugyan az lesz.
Statikus változó alkalmazásával:<?php function hozzaad() { static $i; $i++ ; $eredmeny=3*$i; print("<br /> 3 * $i = ".$eredmeny); } hozzaad(); hozzaad(); ?> |
Eredmény: 3 * 1 = 3 3 * 2 = 6 |
A for ciklussal:<?php for ($i=1; $i < 3; $i++) { $eredmeny=3*$i; print("<br /> 3 * $i = ". $eredmeny); } ?> |
Eredmény: 3 * 1 = 3 3 * 2 = 6 |
Feladat:
Határozzuk meg, a következő méretek alapján, hány köbméteresek a víztározók:
"a" oldal hossza tetszőleges, de jelen esetben a következő értékekkel kell dolgozni: 10m, 15m, 24m, 42m
"b" oldal hossza 10m-es egységgel növekedjen, kezdő értéke: 10m
"c" oldal, azaz mélysége fix, azaz állandó 50 m
Statikus változó alkalmazásával:<?php function terfogat($aoldal) { static $boldal=10; $fixoldal=50; print("Térfogat = ". $aoldal * $boldal * $fixoldal. "m<sup>3</sup><br />"); $boldal=$boldal+10; } // Következik a paraméterek átadása. terfogat(10); terfogat(15); terfogat(24); terfogat(42); ?> |
Eredmény: Térfogat 10 * 10 * 50 = 5000m3 Térfogat 15 * 20 * 50 = 15000m3 Térfogat 24 * 30 * 50 = 36000m3 Térfogat 42 * 40 * 50 = 84000m3 | for ciklus alkalmazásával:<?php $boldal=10; $fixoldal=50; for ($aoldal=10; $aoldal < 43; $aoldal++) { if($aoldal==10){ print("Térfogat = ". $aoldal * $boldal * $fixoldal. "m<sup>3</sup><br />"); $boldal=$boldal+10; } if($aoldal==15){ print("Térfogat = ". $aoldal * $boldal * $fixoldal. "m<sup>3</sup><br />"); $boldal=$boldal+10; } if($aoldal==24){ print("Térfogat = ". $aoldal * $boldal * $fixoldal. "m<sup>3</sup><br />"); $boldal=$boldal+10; } if($aoldal==42){ print("Térfogat = ". $aoldal * $boldal * $fixoldal. "m<sup>3</sup><br />"); } } ?> |
Eredmény: Térfogat 10 * 10 * 50 = 5000m3 Térfogat 15 * 20 * 50 = 15000m3 Térfogat 24 * 30 * 50 = 36000m3 Térfogat 42 * 40 * 50 = 84000m3 |