Heim > Backend-Entwicklung > PHP-Tutorial > So verwenden Sie das Funktionsvariablen-Array von PHP, um die Codestruktur zu ändern (mit Beispielen)

So verwenden Sie das Funktionsvariablen-Array von PHP, um die Codestruktur zu ändern (mit Beispielen)

不言
Freigeben: 2023-04-04 10:06:01
nach vorne
1890 Leute haben es durchsucht

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;
}
Nach dem Login kopieren

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',
        // ...
    ];
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ä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();
Nach dem Login kopieren

Die objektorientierte Methode in PHP ist wie folgt (implementieren). von Ihnen selbst):

<?php
class test
{
    public $arr = [];
    
    public function __construct()
    {
        $this->arr = array(
            &#39;func1&#39;=>&#39;func1&#39;,
            &#39;func2&#39;=>&#39;func2&#39;,
            &#39;func3&#39;=>&#39;func3&#39;,
            &#39;func4&#39;=>&#39;func4&#39;,
            &#39;func5&#39;=>&#39;func5&#39;,
        );
    }
    public function submit($func, $str)
    {
        $f = $this->arr[$func];
        $this->$f($str);
    }
    static public function func1($str)
    {
        print &#39;func1&#39; . &#39; &#39; . $str . "\n";
    }
    static public function func2($str)
    {
        print &#39;func2&#39; . &#39; &#39; . $str . "\n";
    }

    public function func3($str)
    {
        print &#39;func3&#39; . &#39; &#39; . $str . "\n";
    }
    private function func4($str)
    {
        print &#39;func4&#39; . &#39; &#39; . $str . "\n";
    }
    private function func5($str)
    {
        print &#39;func5&#39; . &#39; &#39; . $str . "\n";
    }
}
$t = new test();        // 实例化类
$f = $t->arr[&#39;func1&#39;];
test::$f(&#39;abc&#39;);        // func1 func2 是静态方法
$f = $t->arr[&#39;func2&#39;];
test::$f(&#39;abc&#39;);
$f = $t->arr[&#39;func3&#39;];  // func3 的调用
$t->$f(&#39;abc&#39;);
// func4 func5 的调用需要使用 submit 方法进行分发
$t->submit(&#39;func4&#39;, &#39;abc&#39;);
$t->submit(&#39;func5&#39;, &#39;bcd&#39;);
Nach dem Login kopieren

Die Ausgabe des obigen Codes ist wie folgt:

func1 abc
func2 abc
func3 abc
func4 abc
func5 bcd
Nach dem Login kopieren

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!

Verwandte Etiketten:
php
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage