Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Metody private w interface
Forum PHP.pl > Forum > PHP > Object-oriented programming
Jarod
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? :]
nospor
klasa moze implementowac pewien interfejs, i dodatkowo moze miec swoje inne metody, ktore moga byc prywatne.
Jarod
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.
nospor
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.
Jarod
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?
nospor
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.
dr_bonzo
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)
Jarod
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.. :/
athabus
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.
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.