Klassenobjekte/Methoden und Funktionen per Laufzeit ändern/modifizieren

Ich versteh' nicht ganz, wo dein Problem liegt. Wenn du einfach alles so belassen willst und nur den Rückgabewert ändern willst, dann nutze doch die Variante von Raisch und definiere einfach das Objekt unterschiedlich:
PHP:
class A {
  # ...
}

class B extends A {
  # ...
}

if($plugin) {
  $a = new B;
} else {
  $a = new A;
}

$a->foo();
 
Tipp:
Lies dich mal in die Thematik OOP (Objekt orientierte Programmierung) mit PHP ein. Besonders das Thema Vererbung. Es ist das was die die anderen schon beizubringen versuchen, aber du nicht verstehst. Es ist genau das was du laut deinen Beschreibungen suchst.
Und da es schon sehr viele Anleitungen und Beschreibungen/Erklärungen gibt, müssen wir ja nicht noch eine weitere erstellen.
 
Ja genau, ich möchte lediglich den Rückgabewert ändern.
Das wäre ein Ansatz über den ich noch nicht nachgedacht habe. Ich denke das wird auch so irgendwie funktionieren. Kommt davon wenn man zuviel überlegt.

Yaslaw, ich habe darüber schon nachgelesen, aber ich habe den Eindruck, das Thema Vererbung mir hier nicht weiterhilft. Wie erkannt, möchte ich lediglich den Rückgabewert ändern.

Ich möchte ja mit dem "Plugin" Prinzip eben nicht mehr die Basisklassen ansich abändern müssen und/oder hauptsächlich deren Aufrufe und Deklarationen, die Quer in sämtlichen Scripten verstreut sind. Ein Plugin kann/soll z.b. auch Klassen bzw. deren Verhalten ändern, die global funktionieren und nicht nur innerhalb des Plugins. Innerhalb eines Plugins, kann ich ja mit Vererbung prima Arbeiten, da ich die Klassen aufrufen kann wie mir lustig ist.

Danke euch.
 
Zuletzt bearbeitet:
Wuh, ich wusste gar nicht, dass PHP jetzt auch Mixins kennt – das ist ja toll, damit wird PHP fast schon wieder nutzbar.
 
Was leider nicht funktioniert ist das hier:

PHP:
<?php
trait foo {
	public function test()
	{
		echo "foo";
	}
}

trait bar {
	public function test()
	{
		echo "bar";
	}
}

$trait = "bar";

class foobar {
	use $trait;
}

$foobar = new foobar;
$foobar->test();

Produziert:

Parse error: syntax error, unexpected '$trait' (T_VARIABLE), expecting identifier (T_STRING) or namespace (T_NAMESPACE) or \\ (T_NS_SEPARATOR) in D:\web\htdocs\tests\traittest.php on line 19

Das bedeutet, das man Klassen nicht dynamisch mit Traits erweitern kann - also kein configure-driven-Development mit PHP-Traits :-( Wäre prima für ein Feature wie ein Plugin-System gewesen.
 

Neue Beiträge

Zurück