Autor Zpráva
snazimse
Profil
Zdravím,

chci se zeptat má někdo zkušenost,
je možné když vytvářím instanci v nějaké cizí funkci zjistit třeba v konstruktoru instancované třídy jaká cizí funkce mě volá, bez předání jména namespace apd?

Samozřejmě bez předání konstruktorem...

public function helloWorld() {
 
 $foo = new OtherClass(); //ok
 
 
 return $foo;
}

class OtherClass {

function__construct() {

if("Mě nevolá funkce helloWorld, nepovoluji vytvořit objekt třídy !") {
throw new Exception("bar",0);
}

}
}

PS: S tím konstruktorem, je to blbost, spíš v nějaké funkci pak, ale to je jedno, jen čistě pro ilustraci, nebrat vážně prosím !

Díky za reakce!
Keeehi
Profil
Dá se to zjistit z debug_backtrace().

Ovšem není to běžně používáná funkce. Obzvlášť objektům by mělo být jedno co je okolo nich. Jejich chování by nemělo být závislé na tom, v jaké funkci se s nimi pracuje.
snazimse
Profil
Keeehi:

Jj chápu, obecně závislé ne, spíš bych chtěl diktovat strukturu(v tomto případě název funkce) pro přistup z jiné aplikace, pro přísnou hierarchii, aby měla předepsaný tvar, nebo znáš lepší řešení ?

Dík moc
Keeehi
Profil
Důležitější spíš je, proč vůbec chceš někomu diktovat jak má vypadat jeho aplikace aby v ní mohl použít tu tvoji.
M4n
Profil *
snazimse:
spíš bych chtěl diktovat strukturu(v tomto případě název funkce) pro přistup z jiné aplikace
To není správný způsob. Vlastně je to vyloženě špatný způsob.

V ideálním případě by třída neměla vědět nic o okolním světě a vnější závislosti by měla požadovat při konstrukci definováním typu objektu (nebo lépe interface) parametrů konstruktoru.
snazimse
Profil
Keeehi:

Nechci to bylo řečeno v obecné rovině, tohle konkrétně mám spíš pro sebe, abych se jistil při psaní funkce, že přesně vím co dělám.
Dejme tomu, že to je knihovna která povoluje přístup při splnění hierarchii názvu, které třeba plynou už z dat předávaných dříve...


M4n:

Z toho by plynulo pouze předání konstruktorem :) Chtěl jsem i jiné alternativy, jako právě debug_backtrace();
Nechci to muset ládovat do parametru, vzdálená automatická odpověď v reálném čase pomocí knihovny je značně výhodnější, aspoň podle mě...

A nemyslím si, že by to bylo tak extrémní porušení OOP principu, zvlášť když to pro mě bude výhodnější.

Díky za reakci!
Keeehi
Profil
snazimse:
Jestli chceš kontrolovat sám sebe, tak si napiš a používej testy. Ty jsou k tomu vytvořené. Navíc je máš odděleně a neprasí ti to kód těmito zbytečnostmi. Když to budeš mít v kódu, tak se to bude spouštět vždy, i když to nebudeš vyvíjet a bude to dělat zbytečné kontroly.
snazimse
Profil
Keeehi:

Beru na vědomí, dobrá připomínka :)
Díky
M4n
Profil *
snazimse:
A nemyslím si, že by to bylo tak extrémní porušení OOP principu
Tak to si myslíš špatně. Je to zásadní porušení OOP pravidel.

Žádný projekťák na světě by ti takové kousky v kódu netoleroval.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0