Keresés

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

  • fordfairlane

    veterán

    válasz H.O.D. #13126 üzenetére

    Értelmes fellelhető forrás hiányában arra gondoltam, ez megtörténik az osztály bármely metódusának/elemének használatakor.

    Tudomásom szerint erre nincs beépített automatizmus, osztály használatakor nem történik ilyesfajta inicializálás. A konstruktor példányosításkor hívódik meg.

    A PHP osztálybetöltő mechanizmusa viszont testreszabható, így megoldható egyfajta osztálybetöltő és inicializáló kódrész. Mondjuk ha __init-nek hívod, akkor valami ilyesmivel pl:

    <?php

    spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
    if(is_callable($class, '__init')) {
    $class->__init();
    }
    });

    ?>

  • cucka

    addikt

    válasz H.O.D. #13126 üzenetére

    Statikus adattagot így tudsz inicializálni:
    class Test{
    static $data = 5;
    }

    Nyoévám me, példányosítással, de akkor hogyan?
    A statikus adattagok/metódusok az osztályhoz köthetők, nem az objektumpéldányhoz. Tehát pont az a lényeg, hogy függetlenek attól, hogy létrejön-e akár 1 példány abból az osztályból vagy sem.

    arra gondoltam, ez megtörténik az osztály bármely metódusának/elemének használatakor.
    A statikus adattag akkor jön létre, amikor az osztály kódját értelmezi a php.
    Ezt próbáld meg megérteni: a statikus adattag az lényegében egy globális változó. A trükk, hogy becsomagolod egy osztályba, az osztály nevén keresztül tudod elérni, így nem szennyezed a globális névteret. Egy osztály, ami csak statikus dolgokat tartalmaz, az lényegében nem egy osztály, hanem egy névtér. Akkor használunk ilyet, ha
    - a nyelv nem támogatja a névtereket (pl. régebbi php verziók)
    - a nyelvben nincsenek globális változók (pl. java)

    __autoload()-dal töltöm be, ha abba teszek egy xy::__construct()-ot, az lehet megoldás?
    Nem. Az autoload arra van, hogy megtaláld a hivatkozott osztály file-ját és include-old. A konstruktor meg az a speciális metódus, amely egy osztály példányosításánál fut le. A kettőnek semmi köze egymáshoz.

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

Hirdetés