Funktionen in Klassen sind in abgeleiteter Klasse nicht nutzbar.

danielmueller

Gesperrt
Ich würd gerne meine Mysql Klasse noch in anderen Klassen benutzen. Deshalb habe ich einfach die Klasse geschrieben, in der die mysql Klasse benötig wird und dann mit extends noch die mysql Klasse angehängt. Nun habe ich aber das Problem das ich in der neuen Klasse kein Funktionen aus der mysql Klasse benutzen kann. Normalerweise müsste aber doch genau das möglich sein.
Hiermal ein vereinfachtes Beispiel:
PHP:
 class mysql{
function query($sql){
  	mysql_real_escape_string($sql, $this->connect_id);
    if(!$this->query_id=mysql_query($sql, $this->connect_id)){
      echo "Die folgende Query konnte nicht ausgeführt werden".$sql.mysql_errno().mysql_error();
      return "false";
    }
	$this->querys++;
    return $this->query_id;
	unset($sql);
  }
}

// Dann noch ein Ausschnitt aus der anderen Klasse
class session extends mysql{
function check_admin_cp_perm($user){
		$sql="SELECT `Admin_CP` FROM `user`, `groups` WHERE `user`.`Group`=`groups`.`ID`";
		$query=query($sql);
		$results=get_results($query);
		if($results['Admin_CP']==1){
			return true;
		}else{
			return false;
		}
	}
}

Der Parser behauptet immer Call to undefined function: query() obwohl diese doch in mysql drin ist.
 
Das kann ja auch nicht funktionieren, wie auch? Der Parser "denkt" das die Funktion query() sich in der aktuellen Methode befindet.
Die Lösung ist schlicht und einfach.

Auf der einen Seite kann man mit dem $this Zeiger auf die vereerbte Klasse mysql und auf die Methoden zugreifen.

Eine andere für mich eindeutigere und übersichtlichere Lösung ist durch den Konstrukt parent darauf zu verweisen. Ein Beispiel

parent::query();

Dies hiese: Ich greife auf eine Methode zu, woher die aktuelle Klasse hergeleitet wurde. Hier mysql. Mit den :: Konstrukt sage ich dem Parser das er auf eine Methode und nicht auf eine Variable zugreifen soll.

In diesem Sinne
 
Keiner weis alles ;)
Ab PHP 5 gibt es auch den Konstrukt self:: u.a. mitdem man innerhalb der eigenen Klassse sich nur bewegen kann. In PHP 4 sucht man vergeblich.

In diesem Sinne
 
Zurück