Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zdefiniowanie interfejsu zatrzymuje aplikację
deniol13
post
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

Ostrzeżenie: (10%)
X----


Witam, mam problem. Jeśli zdefiniuję interfejs:
  1. interface CustomException
  2. {
  3. /**
  4. * Display exception
  5. */
  6. abstract function display();
  7. }


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
phpion
post
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
Go to the top of the page
+Quote Post
deniol13
post
Post #3





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
bzeebzee
post
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ę.
Go to the top of the page
+Quote Post
Orzeszekk
post
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)
Go to the top of the page
+Quote Post
deniol13
post
Post #6





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

Ostrzeżenie: (10%)
X----


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:

  1. try
  2. {
  3. $obiekt->wygenerujWyjatek( true );
  4. $obiekt->wygenerujWyjatek( true );
  5. $obiekt->wygenerujWyjatek( true );
  6. $obiekt->wygenerujWyjatek( true );
  7. $obiekt->wygenerujWyjatek( true ); //throw new Exception( 'test' );
  8. }
  9. catch( Exception $Exception )
  10. {
  11. echo $Exception->getMessage();
  12. }



Czy wyechuje mi się kilka wiadomości wyjątków?
Go to the top of the page
+Quote Post
404
post
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
  1. throw
- czyli rzuci wyjątek - leci bez opamiętania to pierwszego bloku
  1. catch
, który dany wyjątek obsłuży.
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: 25.08.2025 - 14:49