Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Bevezetés a kliens- és szerveroldali webalkalmazások készítésébe / A PHP mint programozási nyelv

Tanulási útmutató

Összefoglalás

Ez a fejezet a PHP nyelv alapjaiban vezeti be az olvasót. Az ismertetéskor a fejezet erősen épít a JavaScriptes tapasztalatokra, amit e tananyag korábban már tárgyalt. A PHP-t erre alapozva közelíti meg, kiemelve a hasonlóságokat és az eltéréseket is.

A PHP mint programozási nyelv

Az előző részben a dinamikus szerveroldali webprogramozás filozófiájával ismerkedtünk meg. Láthattuk, hogy a kliens-szerver architektúrát egy harmadik komponens egészíti, egy program, amely a kliensnek leküldött tartalmat állítja elő. Megnéztük a komponensek kommunikációját biztosító protokollokat is. Végül egy C++ programon keresztül mutattuk be a szerveroldali dinamikus tartalomgenerálás működését.

Ebben a tananyagban a továbbiakban azonban nem a C++ nyelvet fogjuk használni erre a feladatra, hanem a PHP programozási nyelvet. Tesszük ezt azért, mert a PHP egy nagyon népszerű és elterjedt nyelv, amelyet kifejezetten dinamikus weboldalak előállítására találtak ki. Rengeteg beépített függvénye és opcionálisan használható moduljai segítségével sokféle művelet végezhető el viszonylag könnyedén. Főleg kis és közepes méretű projektekhez és tartalomkezelő rendszerekhez használják.

Ebben a fejezetben a PHP környezettel és nyelvvel kapcsolatos alapvető tudnivalókat tekintjük át. Egy rövid történeti bevezetőt követően áttekintjük a fejlesztéshez szükséges eszközöket, egy PHP fájl felépítését, futtatását, majd a PHP nyelvi elemeit tekintjük át.

A PHP története

A PHP egy személyes projektből nőtte ki magát a web egyik legelterjedtebb nyelvévé. Születése Rasmus Lerdorf nevéhez kötődik, aki pár CGI szkriptet írt személyes honlapjával kapcsolatos tipikus feladatok elvégzéséhez. Ebből fakad a PHP neve is: Personal Home Page, azaz személyes weboldal. Később ezeket a modulokat a hatékonyság miatt C nyelven írta újra, és kiegészítette űrlapok feldolgozásával és adatbázisok kezelésével kapcsolatos műveletekkel. Az így létrejött projektet 1995-ben PHP2 néven publikálta a hibák gyorsabb megtalálása érdekében.

A következő fontos lépés 1997-ben következett, amikor két izraeli fejlesztő, Zeev Suraski és Andi Gutmans újraírta az értelmezőt, így teremtve meg a PHP3 alapjait. A neve is ekkor változott meg a rekurzív PHP: Hypertext Preprocessor-ra. A PHP-mag az idők során többször került átírásra, jelentősen bővítve a PHP nyelv képességeit. 1999-ben a magot Zend Engine-nek keresztelték el, ennek első verziója szolgált a PHP 4-es verziójának alapjául 2000-ben. 2004-ben jelent meg a PHP5-ös verziója, amelyet a Zend Engine 2 hajtott meg. Ez a verzió sok újítást hozott, legszembetűnőbb az objektum-orientált programozás szélesebb körű támogatása volt. A tananyag írásának időpontjában a 6-os verzió még mindig nem jelent meg.

A PHP részletesebb történetéről a Wikipédián olvashatunk.

Vissza a tartalomjegyzékhez

PHP szkriptek futtatása

A PHP állományoknak a .php a tipikus kiterjesztése. Bár a PHP-t alapvetően a webes környezet ihlette, ez egy általános szkriptnyelv, melyet sokféle környezetben lehet felhasználni. Egyre gyakrabban használják parancssori feladatok elvégzésére (parancssori interfész, angolul Command Line Interface – CLI), amellyel klasszikus szkriptnyelveket, például shell szkriptet vagy a Perlt váltják ki. Ekkor a parancssorban a PHP értelmezőnek megmondjuk melyik állományt futtassa:

> php pelda.php

Népszerűsége kapcsán olyan területeken is megjelenik, amely távol áll eredeti céljától. Ilyen például grafikus asztali alkalmazások programozása, amely egy külön projekt, a PHP-GTK segítségével válik lehetővé.

Természetesen leggyakrabban dinamikus weboldalak készítéséhez használják, és tananyagunk is ilyen szempontból vizsgálja működését. Ekkor a .php kiterjesztésű állományt a webszerveren kell elhelyezni a PHP telepítésétől függően két helyre. Ha a PHP CGI módban van telepítve, akkor a cgi-bin könyvtárba szükséges a futtatandó fájlt elhelyezni. Sokkal hatékonyabb kiszolgálást kapunk azonban akkor, ha a PHP szerver modulként van feltelepítve. Ekkor ugyanis nem külön folyamat (process), hanem csak külön szálként (thread) indul el az értelmező, ami az operációs rendszer szempontjából gyorsabban megvalósítható. Ekkor a PHP állományok bárhol elhelyezkedhetnek a publikus dokumentumaink között. (A CGI és szerver modul futtatása közötti különbségről részletesebben a Weblabor cikkében olvashatunk.)

A PHP szkript meghívását kliensoldalon kell kezdeményezni, pl. a böngésző címsorába írva a PHP állomány webes elérési útvonalát. Például:

http://localhost/peldak/pelda.php

Bárhogy is van a PHP értelmező telepítve az oldalkiszolgálás lépései megegyeznek az előző részben írt folyamattal, csak éppen ebben az esetben a program, amely a tartalmat állítja elő az értelmezett PHP állomány. A webszerver a .php kiterjesztést látva előkeresi a fájlrendszerből az igényelt állományt, majd azt átadja a PHP értelmezőnek, amely végrehajtja az állományban lévő kódot, és annak kimenetét a webszerver továbbítja a kliensnek. A PHP állomány célja tehát az, hogy a megfelelő webes tartalmat (HTML dokumentum, CSS, kép, JavaScript állomány) előállítsa.

A PHP mint dinamikus tartalomgeneráló program az oldalkiszolgálás folyamatábanA PHP mint dinamikus tartalomgeneráló program az oldalkiszolgálás folyamatában

Vissza a tartalomjegyzékhez

Eszközök PHP fejlesztéshez

A szerveroldali webprogramozás eszközigénye az architektúra bonyolultsága folytán sokkal nagyobb, mint a kliensoldali webprogramozásé. A következőkre lesz szükségünk:

Amikor egy meglévő szerverhez kapunk hozzáférést, akkor a fejlesztőkörnyezet szerveroldali része, a webszerver és a PHP beállítások adottak, csak igazodni tudunk hozzájuk. Fejlesztői gépeken azonban mi magunk szoktuk ezeket a komponenseket telepíteni. Itt is két lehetőségünk van. Vagy mi magunk végezzük el az egész infrastruktúra kialakítását, vagy egy előre összeállított fejlesztői csomagot telepítünk a gépre. Az előbbi sokkal időigényesebb folyamat, ugyanakkor jó betekintést ad ezen komponensek működésébe és összeillesztésébe. Az utóbbi ugyanakkor viszonylag gyorsan teszi elérhetővé a fejlesztőkörnyezet kialakítását, ráadásul sokszor hordozható változatban teszik ezt elérhetővé. Sokféle ilyen csomag létezik, például XAMPP vagy WampServer.

Vissza a tartalomjegyzékhez

Egy PHP állomány felépítése

Ahogy fentebb már említettük, a PHP állományok tipikus kiterjesztése a .php, de előfordul, hogy más kiterjesztésű fájlok (pl. .inc) is tartalmaznak PHP kódot. Igazából a kiterjesztés mindegy is, a PHP értelmező a fájl tartalma alapján végzi el a végrehajtást.

Egy PHP állományban a PHP kódot <?php és ?> elemek közé kell helyezni. A legegyszerűbb esetben a fájl egyetlen ilyen elempárt tartalmaz:

Forráskód
<?php
//PHP kód
?>

Egy fájlban azonban több ilyen PHP blokk is elhelyezkedhet. A blokkon belüli rész értelmezésre, az a szövegrész pedig, ami PHP blokkon kívül helyezkedik el, automatikusan kiírásra kerül. A fájl értelmezése szekvenciálisan, felülről lefele történik.

Forráskód
Szöveg
<?php
//PHP kód
?>
Szöveg
<?php
//PHP kód
?>
Szöveg

Vissza a tartalomjegyzékhez

PHP nyelvi elemei

Tananyagunk elején a JavaScript programozási nyelvet az ismertnek feltételezett C++ nyelv felől közelítettük, először hangsúlyozva a hasonlóságokat, később kitérve a lényeges különbségekre is. A PHP nyelv ismertetésénél hasonló elvet követünk. Ahelyett, hogy módszeresen felépítve, egyenként bemutatnánk a PHP nyelv elemeit, megint csak ismerős talajról közelítjük meg a nyelvet, hogy aztán a specifikumokra rátérjünk. Ezzel a módszerrel élve talán könnyebben átjut az olvasó az új nyelv megismerésének nehézségein, és jobban meg tudja érteni a különbségekből adódó lényeges pontokat. A PHP nyelv teljes tudnivalóit és módszeres bevezetését egyébként a PHP dokumentáció nyelvi referenciája tartalmazza.

A PHP egy gyengén típusos, értelmezett, általános célú szkriptnyelv. A fenti tulajdonságok alapján hasonlít a JavaScript nyelvhez, amelynél ezen tulajdonságok jelentését és következményét (pl. automatikus típuskonverzió) már kifejtettük. De nemcsak a nyelv viselkedése lesz számunkra ismerős a JavaScriptből. A PHP ugyanis ugyanúgy C szintaxisú, mint a JavaScript, így a vezérlési szerkezetek, operátorok ugyancsak nem okoznak meglepetést a PHP-t még nem ismerő számára.

A nyelv néhány további jellemzője körvonalakban:

Megjegyzés

Itt érdemes megjegyezni, hogy a PHP és JavaScript közötti hasonlóság egyedül az azonos nyelvi típusból és a C szintaxisból fakad. A PHP nyelv igazi ihletője a C mellett egyébként a Perl nyelv volt. A Perl nyelvet ismerő olvasó számára majd feltűnhet számos olyan elem, amelyet a PHP a Perlből vett át. A legszembetűnőbb a változók $ jellel való jelölése, de számos függvénynek is a Perl volt a forrása.

Megjegyzések

Megjegyzéseket ugyanúgy lehet írni PHP-ban, mint JavaScriptben vagy C++-ban. Ezen kívül a PHP támogatja a shell szkriptből vagy Perlből ismerős szintaxist is, amelynél # jelet követően lehet megadni az egysoros megjegyzést.

Forráskód
<?php
//egysoros megjegyzés
 
# Perl szintaktikájú egysoros megjegyzés
 
/*
többsoros
megjegyzés
*/
?>

Típusok

PHP-ban a következő elemi adattípusok vannak:

Az összetett típusok:

Speciális típusok:

Egyszerű típusok literálformái

Logikai értékek

A logikai típusnak két értéke van (nem kis- és nagybetű érzékeny):

Forráskód
<?php
true
false
TRUE
FALSE
?>

Egész számok

Literálformában megadhatók binrátis, oktális, decimális és hexadecimális értékek:

Forráskód
<?php
12     //decimális 
-34
0123   //oktális
0x0F   //hexadecimális
0b0101 //bináris
?>

Lebegőpontos számok

Forráskód
<?php
3.1415
5.6e12
-7E-2
?>

Szöveg

PHP-ban sokféleképpen lehet szöveget megadni. Legegyszerűbb esetben a szöveget aposztrófok között adjuk meg. Ekkor a PHP semmiféle további feldolgozás nem végez. Ha macskakörmök közé rakjuk a szöveget, akkor egyrészt a szokásos escape szekvenciák értelmeződnek (pl. \t, \n, stb.), másrészt a szövegben lévő változók értékei is automatikusan behelyettesítésre kerülnek. Mindkét megadási mód támogatja többsoros szövegek bevitelét.

A fenti megadási módok alternatívája a nowdoc és heredoc formátum. Ezeknél egy tetszőlegesen megadott token nyitó és zárópárja között adjuk meg a szöveget. A nyitótokent <<< előzi meg, a zárótokennek a sor elején kell lennie egyedüli szövegként a sorban. A nowdoc formátum az aposztrófos megadás, a heredoc a macskakörmös megadás viselkedését örökli.

Változó behelyettesítésekor érdemes a változót -be tenni.

Forráskód
<?php
$a = 12;
 
'alma\t{$a} alma';          //"alma\t{$a} alma"
'Több
sor is lehet benne';
 
"alma\t{$a} alma";          //"alma   12 alma"
"Ez egy
több soros szöveg";
 
<<<'EOT'                    //"Ez is lehet {$a}
Ez is lehet {$a}            // több soros"
több soros.
EOT;
 
<<<EOT                      //"Több soros 12
Több soros {$a}             // szöveg"
szöveg
EOT;
?>

Változók

A változók nevét a $ karakter vezeti be, például: $a.

Hatókört illetően a függvényen és osztályon kívül létrehozott változók globálisak lesznek, a függvényen belül létrehozottak lokálisak. A PHP ezen kívül definiál néhány szuperglobális változót, amelyek mindenhonnan elérhetőek (bővebben ld. függvények).

Kiírás

PHP-ban az echo és a print utasítás szolgál kiírásra. Ezek nem igazi függvények, így a kiírandó kifejezést nem kötelező zárójelbe tenni.

Forráskód
<?php
echo 'piros alma';
 
$szin = 'sárga';
echo "{$szin} körte";
 
echo 'Több
soros
szöveg';
 
echo <<<VEGE
Ez meg egy
{$szin} alma
VEGE;
?>

Típusokkal kapcsolatos fontosabb függvények

Egy változó kiírására, értékének nyomon követésére az alábbi utasítások szolgálhatnak:

Egy változó típusának lekérdezésére a gettype függvény, típusának eldöntésére az is_típus függvények használatosak. Teljesség igénye nélkül:

Egy változó típusának beállítására a (típus)$változó formájú típuskényszerítés vagy a settype($változó, 'típus') függvény használható.

Forráskód
<?php
//Különböző típusú változók
$l = true;
$i = -23;
$d = 23.65;
$s = 'alma';
 
//Kiírások
echo $l;  //1
echo $i;  //-23
echo $d;  //23.65
echo $s;  //alma
 
var_dump($l); //bool(true)
var_dump($i); //int(-23)
var_dump($d); //float(23.65)
var_dump($s); //string(4) "alma"
 
print_r($l);  //1
print_r($i);  //-23
print_r($d);  //23.65
print_r($s);  //alma
 
//Típuslekérdezés
echo gettype($l); //'boolean'
echo gettype($i); //'integer'
echo gettype($d); //'double'
echo gettype($s); //'string'
 
//Típusbeállítás
$sd1 = (string)$d;
$sd2 = $d;
settype($sd2, 'string');
echo gettype($sd1); //'string'
echo gettype($sd2); //'string'
?>

A következő függvények a változók beállítottságát, ürességét kérdezik le:

A függvények viselkedésének megértését összehasonlító táblázatok segítik. A gyengén típusosságból fakadó automatikus típuskonverzióknak szintén külön fejezetet szentelnek a PHP hivatalos leírásában.

Operátorok

A használandó operátorok jelentős része megegyezik a JavaScriptben megismerttel. Egyetlen lényegi különbség, hogy a + operátor PHP-ban kizárólag számok összeadására szolgál, így két operandusát mindenféleképpen számként értelmezi. A szövegösszefűzés operátora PHP-ban a . operátor.

Forráskód
<?php
'piros' + ' alma';  //0
'piros' . ' alma';  //'piros alma'
?>

Vezérlési szerkezetek

Vezérlési szerkezeteket illetően alig van újdonság a PHP-ban a JavaScripthez képest. Egyedül a for ciklusban van eltérés a ciklusváltozó használatában, valamint tömbök és objektumok bejárására egy új ciklus, a foreach szolgál (bővebben ld. a tömböknél).

Forráskód
<?php
//Különbségek a JavaScripthez képest
for ($i = 1; $i <= n; $i++) {
  utasítások;
}
 
foreach ($tomb as $ertek) {
  utasítások;
}
 
foreach ($tomb as $kulcs => $ertek) {
  utasítások;
}
?>

A tömb mint összetett adatszerkezet

Ahogy a típusoknál fentebb már írtuk, PHP-ban kétféle lehetőség van összetett adatszerkezet megvalósítására: a tömb és az objektum. Ebben a tananyagban ugyan majd foglalkozunk a PHP nyelv objektumorientált aspektusával, de csak azért, hogy lássuk működését, és továbblépést biztosítsunk azok számára, akik a kódszervezés ezen formáját szeretnék későbbiekben alkalmazni. A továbbiakban azonban ez a tananyag egyedül a tömböt használja majd mint összetett adatszerkezet. Látni fogjuk, hogy a PHP-beli tömb rugalmassága megengedi ezt számunkra.

A PHP-beli tömb egy olyan dinamikus struktúra, amelynek mérete szabadon változtatható, és amelynek elemei kulcs-érték párokból állnak. A kulcs egész szám vagy szöveg lehet, az érték bármilyen típusú lehet. A PHP-s tömb ilyen jellegű rugalmassága teszi lehetővé, hogy PHP-ban a gyűjtemények általános objektuma legyen. Segítségével gyakorlatilag az összes ismert összetett adatszerkezet leírható, megvalósítható:

A tömb létrehozására az array() kulcsszó szolgál, illetve a PHP 5.4-es verziójától kezdve a JavaScriptből ismerős literálforma ([]) is használható. Az elemek már létrehozáskor is megadhatók kulcs => érték formában vesszővel elválasztva. Az egyes elemekre [] zárójelben megadott kulccsal hivatkozhatunk. A tömb hosszát a count függvénnyel lehet lekérni, de ez nem az utolsó számmal indexelt elem indexét adja vissza, hanem a tömb számosságát. A tömb végére elemet rakni legegyszerűbben egy üres [] operátorral lehet. Ekkor egy számmal indexelt elem jön létre, méghozzá az eddigi legnagyobb számos index eggyel növelt helyén. Elem törlésére az unset függvény szolgál.

Nézzünk néhány példát a tömbök használatára:

Forráskód
<?php
//Üres tömb
$uresTomb = array();
//vagy PHP 5.4-től kezdve:
$uresTomb = [];
 
//Indexelt tömb létrehozása előre megadott elemekkel
$indTomb = array('alma', 12, true, -23.34);
print_r($indTomb);
/*
Array
(
    [0] => alma
    [1] => 12
    [2] => 1
    [3] => -23.34
)
*/
 
//Hivatkozás az elemekre
$indTomb[0];        //"alma"
$indTomb[1];        //12
$indTomb[2];        //true
$indTomb[3];        //-23.34
 
//A tömb hosszának lekérdezése
count($indTomb);    // => 4
 
//Elemek módosítás
$indTomb[1] = 13;
$indTomb[1];        //13
 
//Új elem beszúrása a tömb végére
$indTomb[] = 'új';  
print_r($indTomb);
/*
Array
(
    [0] => alma
    [1] => 13
    [2] => 1
    [3] => -23.34
    [4] => 'új'
)
*/
 
//Új elem felvétele tetszőleges indexre
$indTomb[100] = 'messze';
count($indTomb);    // => 5
print_r($indTomb);
/*
Array
(
    [0] => alma
    [1] => 13
    [2] => 1
    [3] => -23.34
    [4] => 'új'
    [100] => 'messze'
)
*/
 
//A köztes elemek null értékűek
is_null($indTomb[42]);  // => true
 
//Elem törlése
unset($t[1]);
print_r($indTomb);
/*
Array
(
    [0] => alma
    [2] => 1
    [3] => -23.34
    [4] => 'új'
    [100] => 'messze'
)
*/
 
//Asszociatív tömb
$gyumolcsok = array(
    'alma'      => 'piros',
    'korte'     => 'sárga',
    'szilva'    => 'kék',
);
print_r($gyumolcsok);
/*
Array
(
    [alma] => piros
    [korte] => sárga
    [szilva] => kék
)
*/
 
//Hivatkozás elemekre
echo $gyumolcsok['alma']; //piros
 
//Bővítés új elemekkel
$gyumolcsok['barack'] = 'barackszín';
$gyumolcsok[] = 'zöld';
print_r($gyumolcsok);
/*
Array
(
    [alma] => piros
    [korte] => sárga
    [szilva] => kék
    [barack] => barackszín
    [0] => zöld
)
*/
?>

Tömbök bejárása legegyszerűbben a foreach ciklussal lehetséges:

Forráskód
<?php
//Az előző példabeli tömb iterációja
foreach ($gyumolcsok as $gyumolcs => $szin) {
    echo "{$szin} {$gyumolcs}\n";
}
/*
piros alma
sárga korte
kék szilva
barackszín barack
zöld 0
*/
?>

Egy másik lehetőség a PHP tömbkezelő függvényeinek használata (reset(), next(), prev(), current(), key(), each(), stb.)

Forráskód
<?php
reset($gyumolcsok);
while (list($kulcs, $ertek) = each($gyumolcsok)) {
    echo "{$ertek} {$kulcs}\n";
}
?>

Adatszerkezetek modellezése

A tömb rugalmasságát felhasználva a legtöbb ismert és gyakran előforduló adatszerkezetet viszonylag könnyen leképezhetjük PHP-ban.

Értékek sorozatát tipikusan számokkal indexelt tömbben tároljuk. A JavaScript nyelvi elemeit bemutató fejezet példáit felhasználva, a nálunk lévő kütyük felsorolását a következőképpen valósíthatjuk meg:

Forráskód
<?php
$kutyuk = array(
    'telefon',
    'fülhallgató',
    'pendrive',
    'e-könyv olvasó',
);
?>

Ha rekord implementálására van szükségünk, akkor a PHP-s tömb asszociatív funkcióit használjuk ki:

Forráskód
<?php
$hallgato = array(
    'nev'       => 'Mosolygó Napsugár',
    'neptun'    => 'kod123',
    'szak'      => 'Informatika BSc'
);
?>

Gyakran előforduló feladat rekordok tömbjének a megvalósítása. Mivel PHP-ban mindkettőt tömbbel ábrázoljuk, ezért ilyenkor egymásba ágyazott tömbök jelennek meg az adatstruktúrában. A külső tömböt számokkal indexeljük, a belső rekordokat asszociatív tömbökkel valósítjuk meg:

Forráskód
<?php
$hallgatok = array(
    array(
        'nev'       => 'Mosolygó Napsugár',
        'neptun'    => 'kod123',
        'szak'      => 'Informatika BSc',
    ),
    array(
        'nev'       => 'Kék Ibolya',
        'neptun'    => 'kod456',
        'szak'      => 'Informatika BSc',
    ),
);
?>

Természetesen ezek az adatszerkezetek tetszőleges mélységben egymásba ágyazhatók a leírandó adatnak megfelelően:

Forráskód
<?php
$hallgatok = array(
    array(
        'nev'       => 'Mosolygó Napsugár',
        'neptun'    => 'kod123',
        'szak'      => 'Informatika BSc',
        'targyak'   => array(
            'Programozás',
            'Webfejlesztés 2.',
            'Számítógépes alapismeretek',
        ),
    ),
    array(
        'nev'       => 'Kék Ibolya',
        'neptun'    => 'kod456',
        'szak'      => 'Informatika BSc',
        'targyak'   => array(
            'Programozás',
            'Webfejlesztés 2.',
            'Diszkrét matematika',
            'Testnevelés',
        ),
    ),
);
?>
Megjegyzés

JSON formátumban elmentve PHP tömböt, az asszociatív tömbből objektum, az indexelt tömbből tömb lesz. A JSON formátumba mentéssel egy későbbi fejezet foglalkozik.

Függvények

A PHP-beli függvények szintaktikájukban erősen hasonlítanak a JavaScriptbeli függvényekre. A gyengén típusosságból adódóan itt sem kell meghatározni sem a paraméterek, sem a visszatérési érték típusát. Van azonban számos különbség is. Az egyik legfontosabb a változók láthatóságával kapcsolatos. A PHP függvény nagyon zárt, külön jelzés nélkül még a globális változók sem érhetők el belőle. Kétféleképpen lehet rájuk hivatkozni: vagy a $GLOBALS tömbön keresztül, vagy global kulcsszóval kell ellátni a globális változót. Egyedüli kivételt ez alól a szabály alól a szuperglobális változók képeznek. Ezek – ahogy a nevük is sejteti – mindenhonnan elérhetőek. Ilyen például a $GLOBALS tömb is, és későbbi fejezetekben ugyancsak találkozunk majd ilyenekkel.

A paramétereket illetően lehetőség van egy paraméternek alapértelmezett értéket adni, valamint az érték szerinti paraméterátadás mellett referencia szerint is átadhatjuk a paramétereket. Ekkor a formális paraméter előtt a & operátorral kell ezen szándékunkat jelölni.

Forráskód
<?php
//Függvény általános formája
function fvnev($par1, $par2) {
    utasítások;
    return visszatérési érték;
}
 
//Például
function negyzet($x) {
    return $x * $x;
}
negyzet(3);     // => 9
 
//Alapértelmezett érték
function udvozles($nev = 'Senki bácsi') {
    return "Hello {$nev}!";
}
udvozles();     // => "Hello Senki bácsi!"
 
//Referencia szerinti paraméterátadás
$szam = 41;
function novel(&$szam) {
    $szam += 1;
}
novel($szam);
echo $szam;     // => 42
 
//Globális változók elérése
$globus = 'Föld';
function zartFuggveny() {
    global $globus;
    echo "Gyönyörű a {$globus}!"
}
//vagy
function zartFuggveny() {
    echo "Gyönyörű a {$GLOBALS['globus']}!"
}
?>

Hasznos függvények

Az alábbiakban felsorolásszinten megadunk néhány hasznos függvényt. Ezekről bővebben a dokumentációban lehet olvasni.

Tömbműveletek

Szövegműveletek

Dátummal és idővel kapcsolatos műveletek

Vissza a tartalomjegyzékhez

Programozási tételek

A PHP nyelv elemei, az adat- és vezérlési szerkezetek, valamint a függvények ismeretében már rendelkezünk azzal az eszköztárral, mellyel az absztrakt programozási tételek PHP-ban implementálhatók. Az összehasonlítás kedvéért nézzük meg a JavaScriptes példáinkat PHP nyelven.

Összegzés

Feladatunk egy számsorozat elemeinek az összegét meghatározni. A számsorozatot tömbben tároljuk, a megoldást pedig egy külön függvénnyel választjuk el a program többi részétől. A függvény bemenetén a tömb helyezkedik el, visszatérési értékként pedig a megoldás, a számsorozat összege jelenik meg. A tömbön való lépegetés legegyszerűbben a foreach ciklussal végezhető el.

Forráskód
<?php
function osszegzes($tomb) {
    var $s = 0;
    foreach ($tomb as $szam) {
        $s = $s + $szam;
    }
    return s;
}
 
$x = array(1, 3, -2, 8);
echo 'Az összeg: ' . osszegzes($x);
?>

Lineáris keresés

Feladatunk egy számsorozatbeli negatív szám megadása. Ebben a feladatban a kihívást a kimeneten szereplő két adat reprezentálása jelenti. Korábban láttuk, hogy ez leginkább egy rekorddal tehető meg, ami PHP-ban asszociatív tömbbel ábrázolható. A megoldás tehát a következő:

Forráskód
<?php
//Számokkal indexelt tömb esetén
function kereses($tomb) {
    $i = 0;
    while ($i < count($tomb) && !($tomb[$i] < 0)) {
        $i++;
    }
    return array(
        'vane'  => $i < count($tomb),
        'sorsz' => $i
    );
}
 
//Tetszőleges tömb esetén, felsorolókkal
function kereses($tomb) {
    $l = false;
    reset($tomb);
    while (!$l && !(current($tomb) === false)) {
        $elem = current($tomb);
        $l = $elem < 0;
        next($tomb);
    }
    return array(
        'vane'  => $l,
        'elem'  => $elem
    );
}
 
$x = array(1, 3, -2, 8);
print_r(kereses($x)); 
?>

Vissza a tartalomjegyzékhez

A fejezet összefoglalása

Ebben a fejezetben megismerkedtünk a PHP nyelv történetével, futtatási lehetőségeivel, helyével a dinamikus szerveroldali webprogramozásban, egy PHP állomány felépítésével. Láthattuk, hogy milyen nyelvi elemekből áll a PHP nyelv. Azt tapasztaltuk, hogy szerencsére nincsen nagy eltérés sem típusában, sem szintaxisában a JavaScript nyelvtől, így viszonylag könnyedén elsajátíthatjuk a nyelv alapjait. Az adattípusokat tekintve elmondhatjuk, hogy az egyszerű típusok mellett az összetett típusoknál igazából egyetlen típust érdemes ismerni, a tömböt, amellyel szinte bármelyik komplexebb adatstruktúra leírható. A fejezet végén programozási tételek implementálására láthattunk példákat.

Vissza a tartalomjegyzékhez

Feladatok

A JavaScript nyelvi elemeit gyakorló feladatok közül oldjunk meg néhányat PHP nyelven is!

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A tananyag az ELTE - PPKE informatika tananyagfejlesztési projekt (TÁMOP-4.1.2.A/1-11/1-2011-0052) keretében valósult meg.
A tananyag elkészítéséhez az ELTESCORM keretrendszert használtuk.