Können Sie Code in eine PHP-Klasse einbinden?
PHP-Klassendefinitionen erfordern eine bestimmte Syntax, das direkte Einfügen von Code in den Klassenkörper jedoch nicht gestattet. Das Einschließen von Dateien innerhalb einer Klassendefinition ist zulässig, jedoch nur außerhalb des Klassenkörpers oder innerhalb von Methodenkörpern.
Klassenverhalten trennen
Um die Klassendefinition von ihrem Verhalten zu trennen, Sie könnten einen unkonventionellen Ansatz verwenden:
class MyClass { // Class definition public function __construct() { // Include methods from external file include('Myclass_methods.php'); } }
Beachten Sie, dass dieser Ansatz Methoden innerhalb eines Methodenbereichs umfasst, nicht den Klassenbereich selbst.
Einschränkungen beim Einschließen von Dateien
Die direkte Einbeziehung von Methoden in den Klassenkörper ist verboten. Das dynamische Patchen der Klasse, um ihr Verhalten mithilfe von Includes zu ändern, wird ebenfalls nicht empfohlen.
Schnittstelle und Strategiemuster
Eine bessere Lösung zum dynamischen Ändern des Klassenverhaltens ist die Verwendung eine Schnittstelle und implementieren Sie das Strategiemuster. Definieren Sie eine Schnittstelle für allgemeines Verhalten, implementieren Sie verschiedene Miau-Strategien und ermöglichen Sie Ihrer Klasse dann, zwischen diesen Strategien zu wechseln:
interface Meowing { public function meow(); } class RegularMeow implements Meowing { public function meow() { return 'meow'; } } class LolkatMeow implements Meowing { public function meow() { return 'lolz xD'; } } class Cat { private Meowing $meowing; public function setMeowing(Meowing $meowing) { $this->meowing = $meowing; } public function meow() { return $this->meowing->meow(); } }
Mit diesem Ansatz können Sie das Verhalten Ihrer Klasse dynamisch ändern, indem Sie die implementierte Miau-Strategie wechseln .
Das obige ist der detaillierte Inhalt vonKönnen PHP-Klassen Code direkt einbinden und was sind bessere Alternativen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!