Autor Zpráva
host
Profil *
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
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
... mimo mísu ...
BetaCam
Profil
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();
}

?>

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