Wie kann ich einer Klasse dynamisch eine Methode hinzufügen? [Duplikat]Php

PHP-Programmierer chatten hier
Guest
 Wie kann ich einer Klasse dynamisch eine Methode hinzufügen? [Duplikat]

Post by Guest »

Ich weiß, dass ich einer PHP-Klasse zur Laufzeit dynamisch Eigenschaften hinzufügen kann (siehe Beispiel unten).

Aber ich kann keine Möglichkeit finden, eine Methode hinzuzufügen zur Laufzeit in eine Klasse umwandeln.

Was ich bisher versucht habe:

Code: Select all

    class Test {

public $name;

public function __construct($name){
$this->name=$name;
}

public function addProperty($name,$value){
$this->$name=$value;
}

public function addMethod($name, $value) {
$this->$name=$value;
}

}

$t=new Test("Morris");
echo $t->name .'
'; // => "Morris"
echo $t->firstname .'
'; // as expected => "Notice: Undefined property: Test::$firstname"

$t->addProperty("firstname","John"); // dynamically add new property
echo $t->firstname .'
'; // => "John" (property has definitely been added).

$f=function($i){return $i*$i;};
echo $f(7); // ==> 49

$t->addMethod("square",$f); // trying to dynamically add a new method
echo $t->square(4); // expected: 46, but..... => "Fatal error: Call to undefined method Test::square()"
Das funktioniert nicht.

Gibt es noch etwas, was ich in addMethod() tun sollte ?

Oder Irgendeine magische Klassenmethode, die überschrieben werden sollte?

Ist das überhaupt möglich?

Bearbeiten :

Diese Frage wurde geschlossen (01/2025) als Duplikat von Wie füge ich eine Methode zu einer vorhandenen Klasse in PHP hinzu?.

Ich stimme zu: Die Frage klingt doppelt.
Aber ich bin nicht einverstanden mit der Ähnlichkeit der Antworten: @Akash Prajapati unten hat mir dabei geholfen, das zu tun, was ich tun musste: Ermöglichen Sie mir, der tatsächlichen Klasse< dynamisch Methoden hinzuzufügen /em>.

In der Referenz Frage, die akzeptierte Antwort erklärt, wie man eine andere Klasse erstellt, die die eigentliche Klasse umhüllt, und dann diesem Wrapper dynamisch Methoden hinzufügt. Das ist NICHT das, wonach ich gefragt habe.
Ich bin auch nicht einverstanden mit der Ähnlichkeit der Kontexte:< /strong> Die andere Frage betraf das Hinzufügen von Methoden zu einer Drittanbieterklasse, ohne den Originalcode zu bearbeiten. Mein Kontext war anders: Ich hatte die Möglichkeit, meine Klasse nach meinen Wünschen zu entwerfen, und aus irgendeinem Grund wollte ich, dass dieser Entwurf die Notwendigkeit vorwegnahm, zur Laufzeit dynamisch eine Methode hinzuzufügen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post