[ Neosfr @ 16.03.2007. 19:05 ] @
Pozdrav svima,

Iako nemam preterano iskustva sa PHP-om, ne bi se moglo reći ni da sam početnik ali što se tiče OO Programiranja, tu imam puno više iskustva sa javom. U jednom projektu koji trenutno radim baš bi mi leglo da u nekim klasama imam dva konstrukora. Recimo jedan koji prima i jedan koji ne prima argumente, kao što sam navikao u Javi. Ja sam malo googlao o toj temi i našao da: 1. ne može, 2. Šta će ti uopšte dva konstruktora kada su argumenti svkaako opcioni pa ih i ne prosleđuj ako nećeš. Tako sam i uradio i to donekle funkcioniše ali kada instanciram klasu bez argumenta pojavi mi se ružan Warning koji mi kaže šta sam uradio i pokvari celu stranicu.
Pitanje je da li i kako može u PHP-u da se ima jedan konstruktor sa i jedan bez argumenata ili jedan sa dva a drugi sa tri i da kada pozoveš jedan da se ostali ne izvrše.

Hvala unapred!
[ 1r0nM4n @ 16.03.2007. 20:32 ] @
Citat:
kada instanciram klasu bez argumenta pojavi mi se ružan Warning koji mi kaže šta sam uradio i pokvari celu stranicu.

Ovo možeš da ukloniš sa stranice ako staviš u kôdu sledeće:
Code:
error_reporting(0);

Samo što to nije pravo rešenje tvog problema a ja ti ne mogu pomoći jer se do sada nisam bavio OO programiranjem u PHP-u.

p0z
[ w3bl0rd @ 16.03.2007. 21:07 ] @
zar nebi radilo da staviš ovak neš
Code:
class bla
{
function bla($a="default",$b="default")
...
}

pa onda vidiš sve nebi li tako trebalo raditi nisam to sprobal?
[ dakipro @ 16.03.2007. 21:22 ] @
Ovo je i meni prvo palo na pamet. Koliko ja kontam, php nema bas tu vrstu pravih konstruktora, pa su to premostili tako sto mozes funkciji da deklarises "default" vrednost. Inace, error_reporting(0); ce da ti skloni warning, ali lepo rece 1r0nM4n, to ti nije resenje. Mislim da je veoma losa praksa razvijati aplikaciju sa error_reporting(0); . To samo postavis kad skriptu postavis live na serveru, kako krajnji korisnik ne bi video neku gresku. Iskreno, nikad se nisam sreo sa potrebom da koristim dva konstruktora, doduse, ne koristim (nazalost) bas potpuno OOP, pa mozda zato. Mozda da konkretnije opises o cemu se radi, cisto da vidimo dal ovo gore sa defaultnim vrednostima vrsi posao, mada mislim da je to jedini nacin. Opet, mozda i zavisi od slucaja
[ sale83 @ 16.03.2007. 22:26 ] @
Sto se tice overloading constructor na nacin koji koristis u javi, nazalost to u php-u NEMA. I sam sam imao problema sa time. Cak sam postavljao ovde pitanje u vezi toga.

Uostalom pogledaj ovde :
http://au3.php.net/manual/en/language.oop5.overloading.php
http://au3.php.net/manual/en/language.oop5.decon.php


Poz
sale
[ hatebreeder @ 17.03.2007. 00:23 ] @
Citat:
w3bl0rd: zar nebi radilo da staviš ovak neš
Code:
class bla
{
function bla($a="default",$b="default")
...
}

pa onda vidiš sve nebi li tako trebalo raditi nisam to sprobal?


Kolko sam ja upucen ovako je funkcionisalo u starijim verzijama PHP-a... prema onome sa njihovog sajta sada se funkcija mora nazvati ___constructor
[ Ivand @ 17.03.2007. 08:55 ] @
To sada se odnosi na php >5 koji uvodi __construct().

Klasican rad sa vise metoda-konstruktora sa istim imenima poznat iz jave tj c++ u php (jos) nije implementiran,
tako da za sada ti preostaje da koristis __construct sa opcionim argumentima.
[ Br@nkoR @ 17.03.2007. 12:25 ] @
http://www.php.net/manual/en/function.func-get-args.php
[ brainbuger @ 17.03.2007. 16:05 ] @
Ako resis da radis overdrive konstruktora preko func_get_args(), mogao bi recimo da probas nesto ovako:
Code:

class objekat{

   function objekat(){

       $broj_parametara = func_num_args() ; //broj parametara koji je primila funkcija
 
       $niz_parametara = func_get_args() ;  //niz u kojem su svi parametri
 
       call_user_func_array(array( &$this, 'objekat'.$broj_parametara),  $niz_parametara) ; 

   }

   function objekat0(){  //konstruktor koji prima 0 parametara
   }

   function objekat1($p){  //konstruktor koji prima 1 parametar
   }
       
   function objekat2($p1, $p2){  //konstruktor koji prima 2 parametra
   }
}
Radi i na PHP 4.x i na PHP 5.x