Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> interfejs nie pozwala na użycie private?
zdzichu
post
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 28.08.2006

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
envp
post
Post #2





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
zdzichu
post
Post #3





Grupa: Zarejestrowani
Postów: 131
Pomógł: 0
Dołączył: 28.08.2006

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Bora
post
Post #5





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

Ostrzeżenie: (0%)
-----


dawno nie pisałem w php ale zobacz protected.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 17:43