Nein, Sie können keine Dateien in der Klasse Körper umfassen.
In einer Datei, die eine Klasse definiert, dürfen Sie nur Dateien in eine Methodenkörper oder außerhalb des Klassenkörpers einschließen.
Aus Ihrer Beschreibung Ich nehme Sie dies:
<?php // MyClass.php
class MyClass
{
protected $_prop;
include 'myclass-methods.php';
}
<?php // myclass-methods.php
public function myMethod()
{
$this->$_prop = 1;
}
diesen Code laufen in
Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION
führen wird, was möglich ist, wenn dies
<?php // MyClass.php
class MyClass
{
protected $_prop;
public function __construct() // or any other method
{
include 'some-functions.php';
foo($b); // echoes 'a';
}
}
<?php // some-functions.php
$b = 'a';
function foo($str)
{
echo $str;
}
es auf diese Weise tun , wird den Inhalt der Include-Datei in den Methodenbereich und nicht in den Klassenbereich importieren. Sie können Funktionen und Variablen in die Include-Datei aufnehmen, aber keine Methoden. Sie könnte, sollte aber nicht ganze Skripte hinein und ändern, was die Methode, z.
Das Patchen der Klasse auf diese Weise, um ein anderes Verhalten zu zeigen, ist jedoch nicht so, wie Sie es in OOP tun sollten. Es ist einfach falsch und sollte deine Augen bluten lassen.
Da Sie Verhalten dynamisch ändern, ist die Klasse erweitert auch nicht eine gute Option (siehe unten, warum). Was Sie wirklich tun wollen, ist ein interface schreiben und machen Sie Ihre Klasse Objekte verwenden diese Schnittstelle implementieren, so dass die entsprechenden Methoden zur Verfügung stellen. Dies ist ein Strategy Pattern und funktioniert wie folgt genannt:
<?php // Meowing.php
interface Meowing
{
public function meow();
}
Jetzt haben Sie den Vertrag, dass alle Meowing Behaviors gehorchen müssen, nämlich ein Miauen Verfahren mit.Als nächstes ein Miauen Verhalten definieren:
<?php // RegularMeow.php
class RegularMeow implements Meowing
{
public function meow()
{
return 'meow';
}
}
Nun, es zu benutzen, verwenden Sie:
<?php // Cat.php
class Cat
{
protected $_meowing;
public function setMeowing(Meowing $meowing)
{
$this->_meowing = $meowing;
}
public function meow()
{
$this->_meowing->meow()
}
}
Durch das Miauen TypeHint zu setMeowing hinzufügen, stellen Sie sicher, dass die übergebene param die Miauen-Schnittstelle implementiert. Lassen Sie uns ein anderes Meowing Verhalten definieren:
<?php // LolkatMeow.php
class LolkatMeow implements Meowing
{
public function meow()
{
return 'lolz xD';
}
}
Jetzt können Sie leicht Austausch Verhalten wie folgt aus:
<?php
require_once 'Meowing.php';
require_once 'RegularMeow.php';
require_once 'LolkatMeow.php';
require_once 'Cat.php';
$cat = new Cat;
$cat->setMeowing(new RegularMeow);
echo $cat->meow; // outputs 'meow';
// now to change the behavior
$cat->setMeowing(new LolkatMeow);
echo $cat->meow; // outputs 'lolz xD';
Während Sie auch die oben mit inheritance durch Definieren eines abstract BaseCat und miauen Verfahren gelöst haben könnte und dann Bei der Ableitung konkreter RegularCat- und Lolkat-Klassen müssen Sie überlegen, was Sie erreichen möchten. Wenn deine Katzen niemals die Art und Weise ändern, wie sie miauen, dann mach weiter und benutze die Vererbung, aber wenn dein RegularCat und Lolkat in der Lage sein sollen, willkürliche Miauen zu machen, dann benutze das Strategie-Muster.
Weitere design patterns in PHP, überprüfen Sie die folgenden Ressourcen:
Tun Sie dies nicht, lernen Sie, OOP richtig zu verwenden. –
Namespace verwenden! – zloctb