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 |