Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Interfejsy i związane z nimi wątpliwości.
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
lolek09
Do tej pory nie używałem interfejsów nie widząc dla nich większego zastosowania, ale teraz nasunęła mi się sytuacja wręcz idealna do ich zastosowania. Niestety nie wszystko idzie tak jak trzeba, ale od początku.
Robię sobie systemik, który ma w zależności od wyboru użytkownika wyświetlać komunikaty w danym języku. I tak to stworzyłem sobie interfejs i18n, a w nim abstrakcyjną funkcję setLanguage. Ten interfejs służy do tego, żeby klasy które zawierają jakieś komunikaty dla użytkownika pobrały sobie odpowiednie komunikaty. Oczywiście każda klasa realizuje to na inny sposób (niektóre z jednego pliku wpisują komunikaty do tablicy, inne inaczej). W każdym razie setLanguage jest wywoływane tylko raz w konstruktorze, aby pobrać komunikaty. Dlaczego w takim razie jeśli deklaruje je jako public, to dostaję błąd:
Fatal error: Access level to MysqlDB::setLanguage() must be public (as in class i18n) in /var/www/lolek09/index.php on line 6
Jaka jest przyczyna tego, że metody z interfejsów są z zasady public (bo sądzę, że jakaś jest).
Poza tym, jeśli nie można tego zrobić z interfejsem, to jak?

----- edit -----

Właściwie to po długich rozmyślaniach i poszukiwaniach doszedłem do wniosku, że metody odziedziczone z interfejsu muszą być public, bo interfejs, to zbiór zachowań, które klasa zobowiązuje się dostarczyć, natomiast metody prywatne są po prostu częścią implementacji tych zachowań.
Sprostujcie, jeśli się mylę, sorry za zamieszanie.
Pozdrawiam
lolek09
Ozzy
Wymuszanie implementacji metod prywatnych nie miało by większego sensu, gdyż te mogą się zmieniać. Chodzi o to, że klasa, która używa klasy implementującej dany interfejs, ma pewność, że bez problemów będzie mogłą wywołać pewne metody publiczne.
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.