Keresés

Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz Siriusb #205 üzenetére

    :DD
    Szívesen! Most már tényleg megérdemeltem, hogy valaki dobjon egy csontot... :U :D

    Na, vissza a Drupalhoz.
    "Értem én, hogy csak a kimenet számít, de majdnem mindenhol azzal találkoztam, hogy ott van paraméterként a &$variables, szóval furcsa volt."
    Biza, de ha jól megnézed, a $variables előtt ott van a referenciát jelző karakter (&):
    Passing by Reference
    Tehát a változót referencia szerint adjuk át a függvénynek, ezt a függvény fejlécében jelezni kell; ez azt jelenti, hogy akármit is változtatsz ezen a változón, az a hívás helyén is változni fog.
    Erre pont jó egy tök egyszerű példa a php.net-en:
    function foo(&$var)
    {
    $var++;
    }

    $a=5;
    foo($a);
    // $a is 6 here

    Tehát nem visszatérési értéket vizsgálnak, hanem az adott függvény kap egy referenciát, az adott függvényben hozzácsapod a változóhoz a dolgaidat, vagy épp törölsz belőlük, stb., tehát a tömböket nem kell állandóan lemásolgatni, aminek mondjuk elég nagy jelentősége van memóriaspórolási célból.
    Gondolj bele, milyen erőforrás-igénye lenne az amúgy is erőforrás-igényes Drupalnak, ha minden egyes brutális nagy tömböt le kellene másolni.

    Rövid példával:

    function blabla(&$variables){
    $variables['asdasd'] = 'bla';
    unset($variables['nem']);
    }

    $myVariables = array();
    $myVariables['igen'] = 'NEM!';
    $myVariables['nem'] = 'IGEN!'; // :D
    blabla($myVariables);

    Az eredménye ennek:

    $myVariables = array(
    'igen' => 'NEM!',
    'asdasd' => 'bla'
    );

    Tehát a függvényben hozzácsaptam egy adott kulcson lévő értéket ('asdasd' kulcs), meg elvettem egyet (a 'nem' kulcsban lévő értéket), aztán ez lett belőle.
    Remélem érthető.

    A hook_form_alter és ehhez hasonló jellegű függvények (amikben változtathatsz a beállított értékeken) is referenciákat kapnak.
    Ez a konvenció elég könnyen megszokható, ha már megérted a miérteket.

    A hook_theme és egyéb függvények nem ilyen jellegű változtatásokra valók, ott visszatérési értéket vár a Drupal, nem ad át referenciaként semmit.

    [ Szerkesztve ]

    Sk8erPeter

Új hozzászólás Aktív témák