Autor | Zpráva | ||
---|---|---|---|
host Profil * |
#1 · Zasláno: 3. 12. 2008, 19:37:58
Zdravím,
koupil jsem si knžku o OOP a pomalu to začínám štupovat :) Bohužel jsem zatím na začátku a potřeboval bych malou pomoc: mám třeba tento kód: class Main{ function MainFunction() {....} function MinorFunction() { $var = this->MainFunction(); } } $main = new Main(); class Trida1 extends Main { function Funkce 1() { $var = Main->MainFunction(); } } class Trida2 extends Main { function Funkce 2() { $var = Main->MainFunction(); } } a potřeboval bych, aby metoda Main::MainFunction() byla dostupná pouze z tříd Main a Trida1. U všech ostatních aby to vyhodilo chybu ( zde by tedy selhalo volání Trida2::Funkce2() ). Je to v PHP možné? Předem díky |
||
bohyn Profil |
#2 · Zasláno: 3. 12. 2008, 20:03:40
host
1) v nazvu fce nesmi byt mezera 2) pro odkaz na nadrazenou tridu se pouziva parent:: 3) pro skryti pouzij protected nebo private |
||
TFSi Profil |
#3 · Zasláno: 3. 12. 2008, 20:12:26 · Upravil/a: TFSi
... mimo mísu ...
|
||
BetaCam Profil |
#4 · Zasláno: 3. 12. 2008, 21:39:19 · Upravil/a: BetaCam
host
„a potřeboval bych, aby metoda Main::MainFunction() byla dostupná pouze z tříd Main a Trida1. U všech ostatních aby to vyhodilo chybu ( zde by tedy selhalo volání Trida2::Funkce2() ). Je to v PHP možné? “ Důležité je odkud k té metodě budeš přistupovat. Pokud z venku tak metodu MainFunction nemůžeš nastavit na private ani protected a je nutné pro její zakázání ve zděděnných třídách metodu překrýt a třeba vyhodit vyjímku. Uvnitř tříd je to podobné až na to, že by se metoda MainFunction nastavila na protected a ve třídě "Trida2" by se metoda Funkce2 vůbec neimplementovala a pro jistotu by se MainFunction také překryla. Bylo by možná lepší říct čeho chceš ve výsledku vlastně dosáhnout. Jinak tady nástin toho jak to udělat pokud má být "MainFunction" public <?php class Main{ function MainFunction() { return 'main'; } function MinorFunction() { $var = $this->MainFunction(); } } $main = new Main(); class Trida1 extends Main { function Funkce1() { echo $this->MainFunction(); } } class Trida2 extends Main { function Funkce2() { echo $this->MainFunction(); } function MainFunction(){ throw new Exception('Chyba'); } } try{ $a = new Trida1(); $a->funkce1(); $b = new Trida2(); $b->funkce2(); }catch(Exception $e){ echo $e->getMessage(); } ?> |
||
Časová prodleva: 15 let
|
0