PHP problem mit vererbung und interface

heyho,
ich hab hier ein kleines Problemchen.

Ich habe folgendes Interface:

PHP:
interface SearchableInterface {

  public function getId();

  public function getObjectType();
  

  public function getSearchValues();
}
das von einer klasse zu implementieren ist.
diese klasse extended eine base-klasse und in der base-klasse ist die funktion getObjectType(); definiert.

d.h

PHP:
class baseblubb {
  public function getObjectType() {
    return $this->ObjectType;
  }
}

class blubb extends baseblubb implements searchableinterface {
  public function getId() {
    return $this->id;
  }
  public function getSearchValues() {
     return array('blubb', 'bla');
  }
}

problem wenn ich das so mache krieg ich eine warnung das die klasse blubb die funktion getObjectType implementieren muss (logisch da das ja vom interface vorgeschrieben wird).

funktioniert soetwas generellt nicht das eine funktion aus einer parent klasse für ein interface verwendet werden kann?
und wie löse ich das problem jetzt am elegantesten?
 
Zuletzt bearbeitet:
Die Meldung wird verhindern wollen, dass die Basis-Klasse evtl. mal abgeändert wird und somit eine vererbte Methode plötzlich nicht mehr verfügbar ist.

Ich würde es so lösen:
PHP:
class baseblubb {
  public function getObjectType() {
    return $this->ObjectType;
  }
}

class blubb extends baseblubb implements searchableinterface {
  public function getId() {
    return $this->id;
  }
  public function getSearchValues() {
      return array('blubb', 'bla');
   }
 
//Methode von Basis-Klasse durchschleifen, damit das Interface zufrieden ist:
  public function getObjectType() {
      return parent::getObjectType();
   }
 }
 
Oder Du implementierst das Interface in der Basis-Klasse und überlässt die konkrete Implementierung der konkreten Klasse.
 
das interface in der basisklasse implementieren geht nicht da die basisklasse kein searchable sein soll.

das ganze mit parent::getObjectType() funktioniert leider nicht da ich aus unerfindlichen gründen "segmentation fault" kriege was ich als extrem merkwürde empfinde *g*


--------------------
edit:

das problem ist gelöst.
ich hab im interface die methode: "getObjectType" in "getSearchObjectType" umbenannt.
wenn ich jetzt in der klasse
folgende funktion nehme:

public function getSearchObjectType() {
return parent::getObjectType();
}

haut alles hin.

danke für eure antworten.
 
Zuletzt bearbeitet:
das problem ist gelöst.
ich hab im interface die methode: "getObjectType" in "getSearchObjectType" umbenannt.
wenn ich jetzt in der klasse
folgende funktion nehme:

public function getSearchObjectType() {
return parent::getObjectType();
}

haut alles hin.

das ist eigentlich keine Lösung, sondern nur ein Work-Around....
Die Frage ist, woher der SegFault kommt....


also bei mir funktioniert folgender Code problemlos:
PHP:
<?php

interface SearchableInterface {

  public function getId();

  public function getObjectType();
  

  public function getSearchValues();
}


class baseblubb
{
  protected $ObjectType="object_of_";
  
  public function __construct()
  {
      $this->ObjectType.=get_class($this);
  }

  public function getObjectType() {
    return $this->ObjectType;
  }
}

class blubb extends baseblubb implements searchableinterface {
  public function getId() {
    return $this->id;
  }
  public function getSearchValues() {
      return array('blubb', 'bla');
   }
 
//Methode von Basis-Klasse durchschleifen, damit das Interface zufrieden ist:
  public function getObjectType() {
      return parent::getObjectType();
   }
 }

$blaaaa=new blubb();
echo $blaaaa->getObjectType();
?>


Probier mal aus, ob der Code bei dir auch läuft - wenn ja, liegt dein Fehler noch wo anders, wenn nein, dann poste mal bitte deine PHP-Version...
 
der von dir beschriebene code funktioniert ohne probleme.

was ich dazuschreiben sollte... der ganze code läuft innerhalb des symfony frameworks.
 
Zurück
Oben