[ Man-Wolf @ 15.09.2010. 02:30 ] @
Pozz, Nisam siguran da li je vec bila slicna tema, ako jeste, izvinjavam se unapred. Elem, izgubih, pa sta znam, dobrih - 30-60-90min, lupajuci glavu zasto ovaj kod: Code (php): class A { public static function getMe() { self::buildMe(); } public static function buildMe() { echo "Building from Class A"; } } class B extends A { public static function buildMe() { echo "Building from Class B"; } } Vraca ovakve rezultate: Code (php): A::getMe(); // "Building from class A" (ocekivano) B::getMe(); // "Building from class A" (wtf ? lol !) Generalno, kao sto moze da se zakljuci, ono sto bi smo ocekivali da dobijemo kao rezultate - nazalsost ne dobijamo. Zasto ? Hebo mater ... Uspeo sam cak da procitam da su drugari iz PHP-a cak to i obrazlozili - zasto to ne radi kako bi trebalo, itd itd. (nazalost, nisam uspeo da nadjem). Nasao sam par workaround-a, od kojih je jedan tipa: Code (php): class A { public static function getMe($class = __CLASS__) { call_user_func(array($class, 'buildMe')); } public static function buildMe() { echo "Building from Class A"; } } class B extends A { public static function buildMe() { echo "Building from Class B"; } } Kad se ovako odradi, onda su rezultati u redu: Code (php): A::getMe(); // "Building from class A" (ocekivano) B::getMe(); // "Building from class B" (ocekivano) Ali, opet, heh .... Izgleda odvratno, posebno u slucaju kad metoda MORA da primi jedan ili vise parametara. Hebeno moram da napisem u komentarima - "Ni slucajno ne saljite poslednji parametar, ignorisite ga, on je tu samo zato sto je PHP glu.... gotivan :-)". Misljenja ? Ideje ? :-) Iskreno, mislim da cu pre da u kompletu prepisem metodu u klasi B, nego da se igram sa call_user_func() and friends .... EDIT: Zaboravih da navedem nekoliko zanimljivih izvora (na osnovu kojih sam srecom zakljucio da nisam poludeo, srecom): http://socket7.net/article/php-5-static-and-inheritance http://bugs.php.net/bug.php?id=42681 http://bugs.php.net/bug.php?id=28442 |