O Özel / korumalı yöntemleri olan bir arayüze sahip mümkün mü?

4 Cevap interface

O Özel / korumalı yöntemleri olan bir arayüze sahip PHP 5 mümkün mü?

Şu anda var:

interface iService
{
    private method1();
}

Bu bir hata atar:

Bekliyor, sözdizimi hatası, beklenmedik T_STRING T_VARIABLE: hatası Ayrıştırma

Ben sadece bir arayüz, sadece kamu yöntemler içerebilir durumda olduğunu teyit istiyorum.

4 Cevap

PHP manual page about interfaces explicitely şöyle:

All methods declared in an interface must be public, this is the nature of an interface.

Ben bu alıyorsanız hatayı açıklıyor sanırım ;-)

Arabirimler bu arabirimi uygulayan bir sınıfın genel yöntemlerini tanımlamak için kullanılır. Bir arabirim içinde özel bir yöntemi var olamaz. Bir arabirim içinde yöntemleri kullanımda olduğu varsayılır ve değiştirilmemelidir.

Interfaces PHP bağlantı olduğunu, ancak bu OO programlama standarttır.

Bir arayüzün tek işlevi miras olmaktır çünkü genel olarak bir arayüz, sadece kamu üye olabilir.

PHPfreaks.com öğretici:

PHP5 features interfaces. Not to be confused with interfaces in the more general sense, the interface keyword creates an entity that can be used to enforce a common interface upon classes without having to extend them like with abstract classes. Instead an interface is implemented.

Interfaces are different from abstract classes. For one, they’re not actually classes. They don’t define properties, and they don’t define any behaviour. The methods declared in an interface must be declared in classes that implement it.

Because an interface in the more general sense is a definition of how an object interacts with other code, all methods must be declared public (see section on visibility in this chapter). Using abstract classes, an abstract method can have any visibility, but the extending classes must have their implementations use the same (or weaker) visibility. Implementing an interface adds the methods as abstract methods to the subject class, failure to implement it will result in an error like the following:

Fatal error: Class SomeConcreteClass contains n abstract method(s) and must therefore be declared abstract or implement the remaining methodsYes, abstract classes can implement interfaces.

arayüzleri türü bildirimleri bulunmaktadır. Bir tür değerler kümesi, ayrıca dışarıdan onların üzerine yapılabilir işlemlerin bir kümesidir. özel bir yöntemi bu resmin içine sığmıyor.

interface T {
  public /*int*/ function f(array $a);
}
interface U {
  public /*T*/ function g(T $t);
}

class C implements U {
    public function g(T $t) {
        ...
        $x = $t->f();
        ...
    }
}

onlar, iyi, nesnelerin arayüzleri devlet çünkü arabirimleri yararlıdır. nesneler, çevre ile iletişim nasıl.

Şimdi en T::f özel ilan olabilir diyelim. nasıl diğer nesnelere yararlı olacaktır? o, onun arabiriminin parçası dışında çağrılabilir olmaz olurdu.