In diesem Artikel erfahren Sie, wie Sie das Funktionsvariablen-Array von PHP verwenden, um die Codestruktur zu ändern. Ich hoffe, dass es für Sie hilfreich ist . helfen.
Das Projekt wird immer größer, der Code wird immer chaotischer und schwieriger zu warten. Es gibt viele Gründe. Um die Funktion zu realisieren, haben wir zunächst nicht auf die Struktur des Codes geachtet, es handelte sich um ein Outsourcing-Unternehmen. Obwohl der Projektleiter des Unternehmens über Wiederverwendung und Kapselung nachgedacht hat, habe ich das Gefühl, dass der gewünschte Effekt nicht erreicht wurde. Da Entwurfsmuster nicht im gesamten Code verwendet werden, ist diese Struktur definitiv nicht viel besser. Obwohl viele Funktionen gekapselt sind, ist die Schichtung besonders chaotisch und es fühlt sich an wie eine Kapselung um der Kapselung willen. Tatsächlich verstehe ich nicht viele Dinge, aber nachdem ich den Code geschrieben habe, werde ich gelegentlich die Struktur des Codes leicht ändern, um so wenig Löcher wie möglich für mich selbst zu graben.
Probleme mit der Codestruktur
Die Schnittstelle verfügt über eine große Anzahl von Methoden. Zur Beurteilung müssen Sie den Schalter verwenden :
private function makeXML($xmlName, $xmlNameParam) { $requestData = null; switch ($xmlName) { // ... case 'sendOrder': $requestData = $this->sendOrder($xmlNameParam); break; case 'ecfareQuery': $requestData = $this->ecfareQuery($xmlNameParam); break; case 'getInterAV': $requestData = $this->getInterAV($xmlNameParam); break; // ... } return $requestData; }
Der obige Fall Die entsprechenden Methoden werden aufgerufen, um die von der Schnittstelle benötigten XML-Informationen zu verbinden. Die Parameter der
-Methode übergeben den Namen bzw. die Parameter der Spleißschnittstellenmethode.
Ein solcher Urteilsstrukturcode scheint schwierig zu verwalten zu sein. Um eine Methode hinzuzufügen, müssen Sie einen Fallaufruf hinzufügen, und es ist auch chaotisch, wenn Sie ihn betrachten.
Verbesserungen in der Codestruktur
Daher wurden folgende Verbesserungen vorgenommen:
1 Definieren Sie zunächst ein Methodenarray für Speichern Der Methodenname ist wie folgt definiert:
protected $arr = []; public function __construct() { // 初始化接口方法 $this->arr = [ 'getAV' => 'getAV', 'sendOrder' => 'sendOrder', 'ecfareQuery' => 'ecfareQuery', 'getInterAV' => 'getInterAV', // ... ]; }
Wenn es in Zukunft neue Methoden unter dieser Schnittstelle gibt, fügen Sie diese einfach direkt zum Array hinzu. Dies erspart eine Menge Wechselurteile.
2. Ändern Sie die Struktur des Schalters. Der Code lautet wie folgt:
private function makeXML($xmlName, $xmlNameParam) { $requestData = null; $fun = $this->arr[$xmlName]; $requestData = $this->$fun($xmlNameParam); return $requestData; }
Ändern Sie die Struktur des Schalters in die Art des Aufrufs per Array-Index. Auf diese Weise werden alle Methoden einheitlich verwaltet.
Die oben genannten Ideen stammen aus der Verarbeitung von Windows-Nachrichten durch das MFC-Framework.
entspricht einem Array von Funktionszeigern in der Sprache C oder einem Delegaten in C#.
Wissensergänzung:
Prozessorientierte Funktionsvariablen (nachschlagen)
function come() { //定义com函数 echo "来了<p>"; } function go($name = "jack") { //定义go函数 echo $name."走了<p>"; } function back($string) //定义back函数 { echo "又回来了,$string<p>"; } $func = "come"; //声明一个变量,将变量赋值为“come” $func(); //使用变量函数来调用函数come() $func = "go"; //重新给变量赋值 $func("Tom"); //使用变量函数来调用函数go() $func = "back"; //重新给变量赋值 $func("Lily"); //使用变量函数来调用函数back();
Die objektorientierte Methode in PHP ist wie folgt (implementieren). von Ihnen selbst):
<?php class test { public $arr = []; public function __construct() { $this->arr = array( 'func1'=>'func1', 'func2'=>'func2', 'func3'=>'func3', 'func4'=>'func4', 'func5'=>'func5', ); } public function submit($func, $str) { $f = $this->arr[$func]; $this->$f($str); } static public function func1($str) { print 'func1' . ' ' . $str . "\n"; } static public function func2($str) { print 'func2' . ' ' . $str . "\n"; } public function func3($str) { print 'func3' . ' ' . $str . "\n"; } private function func4($str) { print 'func4' . ' ' . $str . "\n"; } private function func5($str) { print 'func5' . ' ' . $str . "\n"; } } $t = new test(); // 实例化类 $f = $t->arr['func1']; test::$f('abc'); // func1 func2 是静态方法 $f = $t->arr['func2']; test::$f('abc'); $f = $t->arr['func3']; // func3 的调用 $t->$f('abc'); // func4 func5 的调用需要使用 submit 方法进行分发 $t->submit('func4', 'abc'); $t->submit('func5', 'bcd');
Die Ausgabe des obigen Codes ist wie folgt:
func1 abc func2 abc func3 abc func4 abc func5 bcd
Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Funktionsvariablen-Array von PHP, um die Codestruktur zu ändern (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!