Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziedziczenie +konsruktory
Forum PHP.pl > Forum > PHP
rzseattle
Jak to wlasciwie jest bo ja juz sam nie wiem

Moze ja cos zle robie ale sami zobaczcie - chce zeby ADoDB bylo dostepne we wszystkich moich obiektach zeby recznie nie trzeba bylo przenosic

no wiec
[php:1:a11d324283]<?php
class obj{
var $_db;
function obj(){
$this->_db =NewADOConnection('mysql');
return 1;
}
}
?>[/php:1:a11d324283]

po czym dziedziczy to obiek np engine
[php:1:a11d324283]<?php
class engine extends obj{

...
function engine(){
//$this->_db->debug = true;
$this->ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$this->conn = $this->_db->Connect($this->db_host, $this->db_user, $this->db_pass, $this->db);
..
}
?>[/php:1:a11d324283]

no i wyskakuje mi oczywiscie
Kod
Fatal error: Call to a member function on a non-object in C:FoxServwwwphpbbengineengine.php on line 27

czyli $this->_db->Connect sie wysypuje

moze ktos zna odpwedz??
KaMeLeOn
Jeśli definiujesz konstruktor w klasie pochodnej, nie zostanie wywołany konstruktor klasy bazowej.
Mówiąc krótko zostanie pominięty.
W przypadku kiedy klasa pochodna nie ma konstruktora wtedy wywoływany jest konstruktor klasy bazowej.
rzseattle
no fakt teraz wszystko ma sens smile.gif a ja sie dziwilem czemu w klasie bazowej raz i sie wykonuje konstruktor a raz nie 8O

W kazdym razie czy jest inny sposob na zrobienie czegos takiego jak powyzej czy trza wszystko recznie robic?questionmark.gif Bo jesli recznie to w sumie juz tak mam ale myslalem ze idzie to zrobic sprytniej smile.gif
KaMeLeOn
[php:1:36bef23973]<?php
class obj
{
var $_db;

function obj()
{
$this->_db = NewADOConnection('mysql');
}
}

class engine extends obj
{
var $conn;

function engine()
{
parent::obj();
//$this->_db->debug = true;
$this->ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$this->conn = $this->_db->Connect($this->db_host, $this->db_user, $this->db_pass, $this->db);
}
}
?>[/php:1:36bef23973]
rzseattle
no wlasnie maam to tez wszedzie jedna linijka w kazdej klasie zalatwione
[php:1:db563026e4]<?php
$this->_db = &$GLOBALS['engine']->_db;
?>[/php:1:db563026e4]
no ale dzieki za pomoc kameleon twoj sposob jest rzeczywiscie lepsiejszy smile.gif
DeyV
najlepiej jest połaczyć jedno i drugi.
tj. w klasie parent dać $this->_db = &$GLOBALS['engine']->_db;
a w potomnych wywoływać konstrutor rodzica.
Ograniczamy wtedy ilość wywołanych obiektów $_db;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.