Konstruktor
Üdv !
Van egy osztályom, aminek van egy konstruktora. Ebből az osztályból származtatok egy gyerek osztályt és ennek már nem akarok konstruktort adni, mert az a szándékom hogy az ős konstruktora hívódjon meg automatikusan. Csak az a baj hogy nem hívódik meg !!! ???
De a dologban nem is ez a vicces hanem az, hogy ha külön jelzem hogy a szülő konstruktorát akarom, tehát :
function __construct(){
parent::__construct();
}
akkor minden gond nélkül megy a rendszer. Namost itt nagy ellentétekbe ütköztem, ugyanis én úgy tudtam hogy ha nem adok meg a gyermek osztálynak konstruktort, akkor automatikusan a szülőé fut le, SŐT mi több, még a könyvben is azt írják ! De nekem nem szeretne lefutni csak ha külön meghívom....
Ötlet ?
■ Van egy osztályom, aminek van egy konstruktora. Ebből az osztályból származtatok egy gyerek osztályt és ennek már nem akarok konstruktort adni, mert az a szándékom hogy az ős konstruktora hívódjon meg automatikusan. Csak az a baj hogy nem hívódik meg !!! ???
De a dologban nem is ez a vicces hanem az, hogy ha külön jelzem hogy a szülő konstruktorát akarom, tehát :
function __construct(){
parent::__construct();
}
akkor minden gond nélkül megy a rendszer. Namost itt nagy ellentétekbe ütköztem, ugyanis én úgy tudtam hogy ha nem adok meg a gyermek osztálynak konstruktort, akkor automatikusan a szülőé fut le, SŐT mi több, még a könyvben is azt írják ! De nekem nem szeretne lefutni csak ha külön meghívom....
Ötlet ?
Nem érzem valószínűnek
Hát ittvan....
class Os {
protected $szamitogep_nev = "localhost";
protected $felhasznalo_nev = "root";
protected $kapcs;
function __construct(){
$this->connect();
$this->selectDB();
}
function connect(){
$this->kapcs = mysql_connect($this->szamitogep_nev, $this->felhasznalo_nev);
}
function selectDB(){
mysql_select_db("adatbazisom", $this->kapcs);
}
function query($query){
return mysql_query($query, $this->kapcs);
}
}
?>
Szóval ebből leszármaztatom a gyerek osztályt és a többi függvényt ott deklarálom, ami nem ilyen általános. Tudom hogy itt nem kéne az öröklődéssel szarakodni és anélkül is megoldható a dolog, de én most így akarom megcsinálni...
include "os.php";
class Gyeremek extends Os {
function csinalValamit(){
...
$this->query($query);
...
}
}
?>
Szóval amikor meghívódik a
$this->query($query);
ott szépen elszáll egy "A mysql_query() két paramétert vár hogy értékkel térhessen vissza. Null paramétert észleltem !" - üzenettel. Hát persze, mivel a konstruktor nem fut le, és ezért a $kapcs változónak nem lövi be az értékét amit az ős osztályban a query() metódusomban definiáltam. Ha viszont így írom hogy :include "os.php";
class Gyeremek extends Os {
function __construct(){
parent::__construct();
}
function csinalValamit(){
...
$this->query($query);
...
}
}
?>
Így már minden klappol és fasza. Most lehetne azt mondani hogy "nem zavar az a konstruktor ott téged..." de engem igenis zavar...mert fölösleges és elméletileg anélkül is működnie kéne hogy én külön meghívom a szülőét.
Jah igen, és mint ahogy az a fenti példából is látszik WAMP szervert használok...Esetleg lehet hogy alapértelmezettként a WAMP szerverben nem működik ez a konstruktor dolog ?
Ezt próbáld ki
Ha ilyen probléma van, mindig proof of concept kódon tesztelj, mert akkor kizárható, hogy máshol baltáztad el, ami itt valószínű.
A WAMP szerver valószínűleg nem ludas ebben, de ezekben a stackekben nem lehet bízni. Legutóbb egy XAMPP-pal hozott össze a rossz sorsom és persze a benne levő MySQL verzió pont bugos volt, szal a truncate table után cacheben benne maradtak a sorok. (WTF)
Mivel a szoftvered valszeg Linuxon fog futni, erőteljesen javaslom, hogy tesztelni is Linuxon tesztelj.
De...
EDIT : Megvan a hiba...Az volt a "hiba" hogy az egyik osztályomnak "Classes" nevet adtam...De nem értem hogy ez miért nem tetszett neki...Átkeresztltem egy másik névre és egyből jó lett...WTF ??
Reserved
Téged is?
Lehetne