Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Metody private w interface
Jarod
post 25.01.2007, 14:27:40
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


W interfejsach można używać tylko metod typu public. A jak sobie poradzić z problemem, kiedy chcemy, żeby dana klasa implementowała pewien interfejs a jednocześnie część jej metod była prywatna? :]


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post 25.01.2007, 14:30:12
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




klasa moze implementowac pewien interfejs, i dodatkowo moze miec swoje inne metody, ktore moga byc prywatne.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 14:56:45
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(nospor @ 25.01.2007, 14:30:12 ) *
klasa moze implementowac pewien interfejs, i dodatkowo moze miec swoje inne metody, ktore moga byc prywatne.

Nie rozumiemy się. Mam np taki kod:
  1. <?php
  2. interface B
  3. {
  4. public function __construct();
  5. private function a();
  6. private function b();
  7. }
  8. ?>


Chciałbym aby każda klasa, która implementuje interface B zawierała metodę a i b i aby te metody były prywatne.


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 25.01.2007, 14:59:30
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ja ci napisalem, ze private to mozesz miec tylko w swojej klasie. moze dookola to napisalem, ale napisalem winksmiley.jpg

Masz:
http://pl.php.net/manual/pl/language.oop5.interfaces.php
Cytat
All methods declared in an interface must be public, this is the nature of an interface.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 15:03:58
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(nospor @ 25.01.2007, 14:59:30 ) *
no ja ci napisalem, ze private to mozesz miec tylko w swojej klasie. moze dookola to napisalem, ale napisalem winksmiley.jpg

Masz:
http://pl.php.net/manual/pl/language.oop5.interfaces.php

Czyli jeśli chcemy być pewni, że dana klasa będzie zawierała wszystkie potrzebne metody, musi implementować dany interface i jednocześnie te metody skazane są na bycie publicznymi?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post 25.01.2007, 15:05:39
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ile razy mozna pisac: tak tongue.gif

Cytat
this is the nature of an interface.
jak chcesz miec prywatne metody, definiuj zamiast interface albo klasy abstrakcyjne, albo zwykle klasy i dziedzic po nich.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
dr_bonzo
post 25.01.2007, 15:48:34
Post #7





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

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


Interface to zbior metod ktorych uzywac moga obiekty INNYCH klas, a zeby mogly ich uzywac to te metody musza byc publiczne. Inne zakresy widocznosci sa zupelnie bez sensu.

J4r0d: pobaw sie interfejsami w Javie, tam one maja dopiero sens, z uwagi na typowanie zmiennych. W php 10 klas moze miec metode blah(), nie implementowac zadnego wspolnego interfejsu i takie cos zadziala:

$someObj->blah(); // bez wzgledu na ktorej klasy obiektem jest $someObj (tzn. duck typing)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Jarod
post 25.01.2007, 19:09:03
Post #8





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


W klasie abstrakcyjnej też nie można używać prywatnych metod. Dlatego, że prywatne metody nie mogą być dziedziczone? Ale przecież, jeśli w klasie abstrakcyjnej jest definicja prywatnej metody a my w klasie dziedziczącej zaimplementujemy tą metodę to powinna być nadpisana.. :/


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
athabus
post 26.01.2007, 10:41:18
Post #9





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Metoda prywatna jest.... prywatna :-) Oznacza zatem, że nie podlega dziedziczeniu. Chcesz dziedziczyć metoda ale jednocześnie odciąć jej dostęp do świata zewnętrznego to stosuj protected.
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 Wersja Lo-Fi Aktualny czas: 25.06.2025 - 02:02