Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> interfejs a skladowe
kicaj
post
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Projektujac klase implementujaca interfejs musi ona zawierac metody takie jak w interfejsie.
Czy jest taka mozliwosc abym wymusil na klasie zdefiniowanie zmiennej skladowej?

Dokladnie chodzi mi o to abym w kazdej klasie ktora implementuje interfejs byla zdefioniowana stala:
  1. <?php
  2. interface jakisInterface
  3. {
  4. const STALA;
  5.  
  6. function jakasMetoda();
  7. }
  8.  
  9. class jakisController implements jakisInterface
  10. {
  11. const STALA = 'wartosc';
  12.  
  13. function jakasMetoda()
  14. {
  15. // ...
  16. }
  17. }
  18. ?>

Jest to mozliwe?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Stale sa w interfejsach jak najbardziej mozliwe w PHP5 - tak trudno sprawdzic ? ; )

Ten post edytował NuLL 5.08.2007, 23:12:48


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
kicaj
post
Post #3





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


  1. <?php
  2. jakisController::STALA;
  3. ?>
Niedziala...

Niechce ustawiac wartosci "STALEJ" w interfejsie, ale chce wymusic jej istnienie w "jakisController"

Jest to mozliwe?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
NuLL
post
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Stala to stala misiu winksmiley.jpg Jej wartosci sie nie zmienia po ustawieniu smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
kicaj
post
Post #5





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


No to moze jakas inna propozycja tego rozwiazania?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


stałe i zmienne w interfejsie... to nie jest możliwe. Być może czegoś nie doczytałem, ale interface jest po prostu abstrakcją zawierające tylko informacje o abstrakcyjnych metodach, które muszę się znaleźć w klasie, która ma dany zaimplementowany. Tam nic nie definiujesz. Jeśli się mylę proszę mnie uświadomić!Poza tym napisz jakie chciałbyś tego wykorzystanie... może wtedy się znajdzie jakieś
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #7





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


abstract


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





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

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


kicaj: to jest bez sensu, skoro kazda klasa implementujaca ten interfejs moze do stalej przypisac dowolna wartosc to oznacza ze ta stala ma zmienna wartosc gdy kozystasz z polimorfizmu. Uzyj np, metody getStalaWartosc() i moga ci zwracac rozne wartosci


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
kicaj
post
Post #9





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Dlaczego bezsensu? Jezeli w interfejsie wymuszamy istnienie metod, to dlaczego nie mozemy wymusic skladowych (tutaj akurat stalej). Interfejs jest jak "szablon" wymaga na klasie implementujacej danych metod (a ja chcialbym miec stala wymuszona w klasach implementujacych)
  1. <?php
  2. class jakasKlasa implements jakisInterface
  3. {
  4. // musze zdeklarowac stala bo wymaga tego moj interfejs 
  5. }
  6. ?>

Rozumiem ze to niemozliw i musze sobie jakos z tym inaczej poradzic:/


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
Sokal
post
Post #10





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 8.02.2007

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


O.o
Przecież interfejs narzuca tylko odpowiednie metody... Implementacja ich w różnych klasach może się różnić. Tak więc bez sensu by było wrzucanie stałej w interfejs bo to stała, jak sama nazwa wskazuje ;-)
Jak chcesz coś takiego to klasa abstrakcyjna.


--------------------
Jabber/E-Mail: dominiksokal[at]gmail.com | GG: #3795571
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #11





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


methoda getCos() która zwraca to co ma być w "stałej"


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
NoiseMc
post
Post #12





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


W interfejsie nie mozesz deklarowac zmiennych, jezeli deklarujesz stala to musisz jej wprzypisac wartosc juz w interfejsie, a jezeli chcesz wymusic na jakims zestawie klas zeby w implementacji okreslac wartosc skladowej to sprobuj uzyc klasy abstrakcyjnej.
  1. <?php
  2. interface JakisInterface
  3. {
  4. public function jakasMetoda ();
  5. }
  6.  
  7. abstract class AbstractController implements JakisInterface 
  8. {
  9. protected $skladowa;
  10.  
  11. public abstract function setSkladowa ($value);
  12. }
  13.  
  14. class JakisController extends AbstractController
  15. {
  16. public function setSkladowa ($value)
  17. {
  18. $this->skladowa = $value;
  19. }
  20.  
  21. public function jakasMetoda ()
  22. {
  23. // Implementacja metody narzuconej przez JakisInterface
  24. }
  25. }
  26. ?>

Kombinowalem jeszcze troche z deklowaniem zmiennych jako abstrakcyjne ale:
Cytat
Properties cannot be declared abstract
Interfaces may not include member variables


Ten post edytował NoiseMc 10.08.2007, 14:20:02


--------------------
Go to the top of the page
+Quote Post
Ludvik
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Cytat
Dlaczego bezsensu? Jezeli w interfejsie wymuszamy istnienie metod, to dlaczego nie mozemy wymusic skladowych (tutaj akurat stalej). Interfejs jest jak "szablon" wymaga na klasie implementujacej danych metod (a ja chcialbym miec stala wymuszona w klasach implementujacych)

Nie wiem, czy porównanie interfejsu do szablonu jest zbyt dobrym pomysłem. Interfejs określa operacje, które możesz wykonywać na obiekcie implementującym go. Składowe nie mają nic wspólnego z interfejsem obiektu - raczej określają jego stan. Stałe to już kompletnie inna bajka. Stała jest stałą, reprezentuje coś, co się nie zmienia. Cechy obiektów powinny być zwracane przez odpowiednie akcesory.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 05:28