Wenn ich eine Schnittstelle in PHP definiere, und eine Factory-Klasse, die eine Instanz dieser Schnittstelle erstellt, gibt es eine Möglichkeit, Client-Code zu zwingen, nur die Schnittstelle und nicht die zugrunde liegende konkrete Klasse zu verwenden? Aus meiner Sicht sind die Clients in der Lage, auch alle öffentlichen Funktionen/Felder in der zugrunde liegenden Klasse zu verwenden. HierWas ist der Zweck von Schnittstellen in PHP?
ein Beispiel:
<?php
interface IMyInterface
{
public function doSomething();
}
?>
<?php
class ConcreteImplOfMyInterface implements IMyInterface
{
const NotPartOfInterface = 'youcantseeme';
public function doSomething()
{
}
}
?>
<?php
class MyInterfaceFactory
{
public static function createMyInterface()
{
return new ConcreteImplOfMyInterface();
}
}
?>
<?php
function client()
{
$myInterface = MyInterfaceFactory::createMyInterface();
return $myInterface::NotPartOfInterface;
}
?>
+1 für gute Sachen – alex
Ich verstehe OOP Access Modifiers und ich weiß, dass PHP Typ Hinting hat. Die Tatsache, dass es keinen Typhinweis auf Funktionsrückgabetypen gibt, macht Interfaces für mich jedoch sinnlos. Was, wenn ich möchte, dass Klassen in derselben logischen Komponente öffentliche Methoden gegenseitig aufrufen können, aber ich wollte, dass diese Komponente als Ganzes öffentliche Schnittstellen verfügbar macht, die die einzige Möglichkeit darstellen, mit dieser Komponente zu kommunizieren? In PHP scheint das nicht möglich zu sein. – jameswelle
Eine interessante Sache ist, dass Sie geschützte und sogar private Methoden/Variablen von Instanzen der aktuellen Klasse erreichen können. Wenn die Benutzerklasse beispielsweise die private Eigenschaft $ token hat, können Sie eine Methode innerhalb der Benutzerklasse haben: public function changeToken (Benutzer $ user) {$ user-> token = '1234'; } – Joe