ugrás a tartalomhoz

Konstruktor

whiteman0524 · 2009. Okt. 24. (Szo), 00.02
Ü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 ?
 
1

Nem érzem valószínűnek

janoszen · 2009. Okt. 24. (Szo), 09.11
Valami árulás van nálad, vagy PHP configban vagy a kódban. Másold be a tesztkódodat légyszi. (Feltételezem, hogy írtál egy 10 soros tesztkódot.)
2

Hát ittvan....

whiteman0524 · 2009. Okt. 24. (Szo), 10.06
...a kód lényege :

<?php

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...

<?php

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 :

<?php

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 ?
3

Ezt próbáld ki

janoszen · 2009. Okt. 24. (Szo), 10.48

<?php

class A
{
 function __construct()
 {
  echo("Bumburnyak");
 }
}

class B extends A
{
}

new B();
?>
Ez se megy?

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.
4

De...

whiteman0524 · 2009. Okt. 24. (Szo), 11.33
A fenti kód tényleg működik...És akkor én mit rontottam el ?? Tényleg annyi a kód mint följebb írtam...és mégse működik... :S

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 ??
5

Reserved

janoszen · 2009. Okt. 24. (Szo), 12.52
Engem ennél sokkal jobban idegesít az, hogy egyetlen függvény neve sem lehet az, hogy list, mert az language construct. Már komolyan elgondolkoztam azon, hogy kipatchelem belőle.
6

Téged is?

Joó Ádám · 2009. Okt. 24. (Szo), 13.09
Gyűlölöm.
7

Lehetne

janoszen · 2009. Okt. 24. (Szo), 13.54
Igazából az a baj, hogy az egyenlőség operátor bal oldalán is állhat, különben már rég átalakítottam volna és visszaküldtem volna patchben.