Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: interfejs nie pozwala na użycie private?
Forum PHP.pl > Forum > PHP > Object-oriented programming
zdzichu
Witam. Problem wyglada następująco:
mam sobie interfejs, wygląda mniej więcej tak:
  1. <?php
  2. interface db_interface{
  3. public function connect($host,$user,$pass,$pconnect=FALSE);
  4. public function select_db($database);
  5. public function execute($query);
  6. private function prepare($query);
  7. }
  8. ?>

problem jest z funkcją prepare, a dokładniej z oznaczeniem jako private...
  1. <?php
  2. class db implements db_interface{
  3. (...)
  4. private function prepare($query){
  5. (...)
  6. return $query ;
  7. }
  8. ?>

pluje mi:
Cytat
Fatal error: Access type for interface method db_interface::prepare() must be omitted in

zmieniając na public problem znika... jak rozwiązać problem?
envp
Nie rozumie, po co w interfejsie cos do czego nie bedzie dostępu z zewnątrz. Interfejs to 'cos' do komunikowania sie z obiektem, sowjego rodzaju "bramki" którędy wchodzą i wychodzą dane z obiektu, a skoro coś nie może być "bramką" nie może zostać zdefiniowane jako interfejs. Zawsze możesz zrobić klase abstrakcyjną jako rodzica i metode abstrakcyjną dać, wtedy, każdy kto dziedziczy musi ją nadpisać.
zdzichu
generalnie chodzi mi o to, zeby nie można było się bezpośrednio w kodzie odwołać do funkcji prepare(
  1. <?php
  2. $db->prepare('cos');
  3. ?>

stąd prywatność tej funkcji- natomiast jeśli w interfejsie nie zadeklaruję typu (czyli de facto zostawie jako publiczną), a w kodzie ustawie jako private to zaraz zacznie pluć, że jest niezgodne z interfejsem...
dr_bonzo
zdzichu: interfejs to zestaw metod za pomoca ktorych inne obiekty komunikuja sie z obiektem implementujacym ten interfejs.

Sama implementacja interfejsu (sposob jego wykonania -- czyli m.in. metody prywatne) nie jest wazny dla tych pozostalych obiektow.

Po prostu w ogole nie deklaruj prepare() w interfejsie tylko w klasach jako prywatna. Klasa moze zawierac tez metody nie znajdujace sie w interfejsie, ktory implementuje.
Bora
dawno nie pisałem w php ale zobacz protected.
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.