![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 2 Dołączył: 30.11.2009 Ostrzeżenie: (10%) ![]() ![]() |
Witam, mam problem. Jeśli zdefiniuję interfejs:
To skrypt PHP się zatrzymuje. Jeszcze żadna klasa nie implementuje tego interfejsu... Jeśli usuną ten interfejs to skrypt się wykona, co jest nie tak? Raportowanie błędów na E_ALL a nie ma żadnego błędu. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wywal abstract sprzed metody.
Jeszcze odnośnie braku błędu: powinieneś otrzymać: Cytat Fatal error: Access type for interface method CustomException::display() must be omitted Samo error reporting nie wystarczy. Musisz jeszcze dać ini_set('display_errors', 'on') albo ustawić tą wartość w php.ini |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 2 Dołączył: 30.11.2009 Ostrzeżenie: (10%) ![]() ![]() |
Oczywiście pomogło, ale dlaczego to nie chciało działać? W książce PHP5 Zaawansowane Programowania na stronie 45 są opisane interfejsy i tam jest interfejs którego metody poprzedzone są abstract... błąd autora?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 3 Dołączył: 25.12.2011 Ostrzeżenie: (0%) ![]() ![]() |
Albo błąd autora albo źlę zrozumiałeś pojęcię interfejsu w konteksie tamtej strony. Na klasy abstrakcyjne czasem mówi się interfejs. Klasa mogła być abstrakcyjna i posiadać taką metodę.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 14 Dołączył: 8.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Interfejs jest klasa abstrakcyjna w ktorej wszystkie metody sa abstrakcyjne, nie-statyczne oraz publiczne. Jest to zbior nagłówkow metod za pomocą ktorych mozna sie komunikowac z obiektem (na pewno).
moze interfejsy w php nie maja zbyt duzego zastosowania bo to jezyk dynamiczny, ale w javie np uzywa sie ich aby okreslic czy jakas klasa jest w stanie wykonac dana czynnosc (np jesli implementuje Serializable to znaczy ze mozna ja serializowac, itd..). Z tych cech interfejsow ktore podalismy wynika ze kazda metoda w klasie jest na pewno abstrakcyjna, wiec nie uzywamy tego keyworda. interface costam { public function jedna(); public function druga(); } interfejs moglbys zapisac za pomoca klasy abstrakcyjnej abstract class costam { abstract public function jedna(); abstract public function druga(); } jednak taki sposob zapisania nie pozwala na zaimplementowanie kilku interfejsow jednoczesnie , a jak zrobisz interface to mozesz ich i 100 zaimplementowac w klasie (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 190 Pomógł: 2 Dołączył: 30.11.2009 Ostrzeżenie: (10%) ![]() ![]() |
Oczywiście dzięki za pomoc!
Mam jeszcze jedno pytanie co do wyjątków, teraz nie mam jak tego sprawdzić a mianowicie jeśli mam blok try i w nim wykonam kilka operacji, które mogą wypluć wyjątek i co się wtedy stanie gdy np wszystkie (lub dowolna ilość większa od 1) rzuci wyjątkiem? Oczywiście pod blokiem try mam blog catch. Mniej więcej to tak wyglądało by:
Czy wyechuje mi się kilka wiadomości wyjątków? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat (...)co się wtedy stanie gdy np wszystkie (lub dowolna ilość większa od 1) rzuci wyjątkiem? Nie ma takiej możliwości. Kiedy Twoja aplikacja napotka - czyli rzuci wyjątek - leci bez opamiętania to pierwszego bloku , który dany wyjątek obsłuży. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 14:49 |