Heim > php教程 > PHP开发 > Überdenken von PHP-Programmiermethoden (Teil 2)

Überdenken von PHP-Programmiermethoden (Teil 2)

黄舟
Freigeben: 2016-12-21 10:51:44
Original
1149 Leute haben es durchsucht

Nachdem ich zwei Tage lang gezögert habe, habe ich heute Abend endlich Zeit, das nächste Kapitel zu schreiben. Allerdings weiß ich angesichts des Computers nicht, wo ich anfangen soll. Vielleicht folgen Sie einfach ZEND FRAMEWORK. Natürlich werde ich die wichtigsten Punkte verstehen. In diesem Artikel wird das Zend-Framework als Beispiel verwendet, um mein Verständnis der objektorientierten Programmierung zu erläutern, und nicht als Einführung in das Zend-Framework. orientiertes Programmieren, aber mein Verständnis von objektorientierter Programmierung.

02 1. Einheitliche Eintragsdatei

03 In den Augen vieler Menschen kann PHP immer noch nicht als „vollständig“ objektorientiert angesehen werden. Der Grund dafür ist, dass objektorientiert sein sollte, dass alle Programme muss objektiviert werden, und PHP hinterlässt auch eine Eintragsdatei. Aber diese Art der akademischen Debatte hat eigentlich nichts mit uns zu tun. Wir müssen nur wissen, dass als vollständig objektorientierte Anwendung mit Ausnahme von index.php alle Programme in Form von Klassen geschrieben werden sollten.

04 Im Zend-Framework wird die Rewrite-Technologie verwendet. Rewrite nutzt nicht nur die pseudostatische Funktion, um die Einbeziehung in Suchmaschinen zu fördern, sondern verhindert auch die direkte Ausführung von indizierten PHP-Dateien, um Sicherheitsrisiken zu vermeiden. In Joomla kann Rewrite im Hintergrund ausgewählt werden. Discuz und PHPWind bieten beide Rewrite-Optionen. Im Zend-Framework kann es dazu führen, dass viele ZF-Anfänger Blut erbrechen Konfigurieren Sie es überhaupt nicht, nur die URL-Adresse des Links ist anders. Es ist seltsam, dass dies in keiner Information erwähnt wird. Tatsächlich können wir das Zend-Framework unter IIS und auf den meisten virtuellen Hosts verwenden, die PHP unterstützen, ohne uns um das Umschreiben kümmern zu müssen.

05 Natürlich unterstütze ich persönlich die Rewrite-Technologie. Für mich hat diese Technologie mindestens drei Vorteile: 1. Verwendung einer pseudostatischen Methode, um die Suchmaschinenindizierung zu verbessern; 2. Schutz wichtiger Dateien und gefährlicher Dateien nicht ausgeführt und heruntergeladen werden; 3. Wenn Sie PHP zum Generieren von Bilddateien verwenden, sind die URL-Adresse und das tatsächliche Bildadressformat genau gleich.

06 Daher sollte ein gutes objektorientiertes Programm die Eingabedateien vereinheitlichen und die Rewrite-Funktion verwenden, um die Verwendung anderer nicht standardmäßiger PHP-Dateien einzuschränken.

07 2. MVC-Modus

08 MVC ist eine sehr klassische Programmiermethode. Ich habe bereits im vorherigen Artikel dieses Artikels erwähnt, dass eine Datei pro Programmseite am effizientesten ist, wenn wir ausschließlich die Ausführungseffizienz anstreben. Da die Arbeitskräfte jedoch ihre Grenzen haben, ist es notwendig, die Akten in Stücke zu schneiden und sie nach bestimmten Regeln zu klassifizieren. Wenn Sie PHP schon lange genug verwenden, sollten Sie eine Vielzahl von Schnitt- und Dateiklassifizierungsmethoden kennengelernt haben. Unter ihnen ist MVC die einzige, die in ein Muster sublimiert und akzeptiert wurde.

09 Wenn allgemein angenommen wird, dass das Programm und die Seite getrennt sind, das heißt, dass die Ansicht unabhängig ist, haben viele Menschen immer noch unterschiedliche Meinungen darüber, ob der Controller und das Modell getrennt werden sollten. Zuerst dachte ich, dass kleine Projekte nicht so speziell sein müssten, aber bald entdeckte ich die Vorteile von Modellen. Modelle ähneln in ihrer Funktion weitgehend den Funktionsbibliotheken in prozessorientierten Projekten. Diese Gründe gelten auch für die Unterteilung in Funktionen , MODEL ist nur eine einheitliche Klassifizierung dieser Funktionen. Der Hauptunterschied zwischen einem Modell und einer Funktionsbibliothek besteht darin, dass wir normalerweise für jede Datentabelle ein Modell erstellen, sodass nicht zu viele Methoden in jedem Modell vorhanden sind und auch die Benennung der Methoden vereinheitlicht werden kann. In der Funktionsbibliothek heißt beispielsweise das Löschen von Artikeln delArticle(), das Löschen von Bildern heißt delPicture(), das Löschen von Benutzern heißt delUser(), und wenn sie einmal nach Modellen getrennt sind, wäre es nicht viel schöner, sie alle del zu nennen ()?

10 Unabhängig von der Größe des Projekts lohnt es sich daher immer, MODEL zu verwenden, solange die Datenbank verwendet wird.

11 Eine diskussionswürdige Frage ist, dass das Modell theoretisch nur für die Datenverarbeitung und nicht für die Ausgabeanzeige verantwortlich ist. In mehreren meiner vorherigen Projekte wurde die Ausgabe auch in der Sicht des Frameworks platziert Assistent. Aber vor kurzem habe ich eine Methode zum Generieren von Listen und Verzeichnisbäumen direkt im Modell eingeführt, die im Vergleich zum Ansichtsassistenten einiges an Zeit spart, und ich werde damit fortfahren, bis ich keine Probleme mehr habe eine kleine Menge Ausgabe im Modell: Generieren Sie eine Zeichenfolge und geben Sie sie an den entsprechenden aufrufenden Befehl im Controller zurück. Wenn ich jetzt darüber nachdenke, habe ich es vielleicht falsch verstanden. Vielleicht ist das in den Informationen erwähnte MODEL nicht für die Ausgabe verantwortlich, sondern erfordert nur die direkte Anzeige der Seite und die Generierung von Zeichenfolgen ohne Echo usw. Vielleicht ist es überhaupt erlaubt.

12 3. PHPUnit-Test-Framework

13 Bei der prozessorientierten Programmierung schreiben viele Leute bei Bedarf Funktionen und rufen die Funktion dann direkt auf, um zu testen, wo die Funktion aufgerufen werden muss. Vielleicht stellten viele Menschen wie ich eines Tages plötzlich fest, dass sie eine Infektion durch verschiedene äußere Faktoren nicht tolerieren konnten, und erstellten daher eine neue test.php, um diese Tests durchzuführen. Als die Anzahl der Tests allmählich zunahm, wurde test.php geändert Im Testordner werden Tests für alle Funktionen gespeichert. Dies ist der Prototyp von phpunit. Während des gesamten Programmierprozesses nehmen Tests viel Zeit in Anspruch, und phpunit speichert diese Tests, wodurch wir viel Testzeit sparen, wenn wir in Zukunft Klassen und Methoden ändern.

14 4. Klassenabstraktion und Vererbung

15 In meinem Code findet Vererbung immer statt, aber es gibt sehr wenig Abstraktion. Abstraktion und Schnittstelle erfordern zwingende Definitionsanforderungen für das Schreiben von Programmen. Für Programmierer mit wenigen Mitarbeitern scheint dies daher nicht viel Sinn zu machen. Doch gerade aufgrund der Freiheit und Laxheit im Programmierprozess werden wir oder unser nächster Programmierer die Konsequenzen oft später spüren. Ich habe im Eröffnungskapitel bereits erwähnt, dass das Schreiben dieses Beitrags ein Prozess des Nachdenkens über meine bisherigen Erfahrungen ist. Was ich hier also sagen möchte, ist, dass der Code, den ich zuvor geschrieben habe, selten Abstraktionen und Schnittstellen hatte, und das werde ich auch in Zukunft tun Machen Sie diesen Punkt nach, um meine Benennung von Eigenschaften und Methoden zu vereinheitlichen.

16 5. Designmuster

17 Bisher haben die Leute insgesamt 23 Designmuster zusammengefasst, unter denen ich mehr Registrierungsmodus, Factory-Modus und Singleton-Modus verwendet habe. Entwurfsmuster sind eine Zusammenfassung früherer objektorientierter Programmiermethoden. Wenn ich mit dem Zend-Framework programmiere, kann ich sie häufig direkt verwenden, ohne zu viel über ihre technischen Details zu wissen. Beispielsweise wird die Registrierungsklasse zend_register verwendet und zend_form nutzen den Dekorationsmodus ausgiebig, und auch Technologien wie die Reflection-API werden sinnvoll genutzt. Umgekehrt ist es natürlich auch schwieriger geworden, das Zend-Framework zu erlernen. Wenn wir eine Technologie erlernen, geben wir uns oft nicht damit zufrieden, zu wissen, warum. Und diese Modi werden offensichtlich nicht von einem ZEND-Handbuch abgedeckt RAHMEN Der Grund, warum es schwierig ist, es zu meistern, hat viel damit zu tun, dass wir kein tiefes Verständnis für verwandte Kenntnisse wie Designmuster haben.

18 6. Framework

19 Viele Menschen haben Angst vor dem Zend-Framework. Sie würden lieber ein paar kleine, leichte Frameworks erlernen, als sich an das Zend-Framework zu wenden. Tatsächlich habe ich selbst viel gelitten und viel Zeit damit verschwendet, das Zend-Framework zu lernen und anzuwenden. Schließlich wurde mir klar, dass das Framework unser ursprüngliches Programmierdenken geändert hat. Wir sollten das Framework wie im Handbuch und im Einführungsleitfaden beschrieben verwenden, anstatt an unseren Gewohnheiten festzuhalten und das Framework zu ändern, um es an uns anzupassen Das Ergebnis mit halbem Aufwand erreichen und mehr verlieren als den Gewinn. Ich habe zum Beispiel kürzlich eine Website mit den folgenden Funktionen geschrieben:

20 1. Zeigen Sie die Kategorieliste und den Artikelinhalt aller Artikel im Forum-Einreichungsbereich an

21 2. Zeigen Sie eine Liste an aller eingereichten Artikel der Freunde des Autors;

22 3. Google Sitemap automatisch generieren.

23 Es gibt tatsächlich recht wenige Funktionen, aber einschließlich der Designseite habe ich nur zwei Tage gebraucht, um diese Website basierend auf dem Zend-Framework fertigzustellen (und es waren keine zwei vollen Tage). Obwohl es als Schwergewichts-Framework bekannt ist, eignet sich das Zend-Framework daher tatsächlich für die Entwicklung kleiner Projekte. Wenn Sie der Meinung sind, dass das Zend-Framework zu groß ist, müssen Sie nicht so viele Funktionsbibliotheken verwenden und nur diejenigen verwenden, die Sie beherrschen. Das Problem mit dem Zend-Framework besteht darin, dass es zu viele Funktionen hat und es unmöglich ist, sie alle in einem Projekt zu beherrschen. Denken Sie also daran, dies Schritt für Schritt zu tun.

24 Natürlich können wir auch überhaupt kein Framework verwenden und objektorientierte Programme basierend auf der MVC-Methode schreiben. Was ich daher nicht verstehen kann, ist die Bedeutung der Existenz dieser leichtgewichtigen Frameworks . Wenn ein Framework nur ein Architekt des MVC-Musters ist, warum schreiben wir es dann nicht einfach selbst, genau wie bei der Verwirrung über Smarty?

25 Sie können zum Beispiel so schreiben:

26 index.php

27

28 Klartext in Zwischenablage anzeigen und drucken? >29 < ;?php

30 $controller=$ _GET['controller']

31 require_once 'controller/'.$controller.'.php'; >32 < ;?php

33 $controller=$ _GET['controller']

34 require_once 'controller/'.$controller.'.php'; >35

36 controller.php

37

38 Klartext in Zwischenablage anzeigen und drucken?

39    

40    require_once 'some_model.php';      

41    $model=new Some_Model();      

42    $string=$model->getString;      

43    require_once 'templates/templte.phtml';     

44    

45    require_once 'some_model.php';    

46    $model=new Some_Model();    

47    $string=$model->getString;    

48    require_once 'templates/templte.phtml';    

49    

50    some_model.php    

51    Klarkopie in Zwischenablage anzeigen und drucken?    

52    

53    class Some_Model extends PDO{      

54         public function getString(){      

55               $string='Hallo Welt! ';      

56                return $string;      

57        }      

58    }     

59    

60    class Some_Model extends PDO{    

61         öffentliche Funktion getString( ){    

62               $string='hello world!';    

63                return $string;    

64        }    

65    }    

66    

67    template.phtml    

68    

69.   Klarkopie anzeigen zu Zwischenablage drucken?    

70          

71    ......      

72          

73          

74          

75         

76        

77    ......    

78        

79        

80        

81        

82    

83    

84  🎜>85    当然,这个只是我随手打的例子,我买过本书叫《PHP高级程序设计:模式、框架与测试》,里面有一个自制轻量级框架的演示比我这个要好得多.所以,我感觉那些轻量级框架,似乎没有什么存在的价值.而zend Framework则不同,它的庞大类库事实上是制定了一个标准,回忆一下我们到现在, 究竟换过多少类库?数据库类、分页类、缓存类、文件上传类......得原来的下载地址、或是自己写的类想法有了变化重新再写一个等等理由,而更换成了另一个类.每个类看似不大学习成本不高,加到一起就不容小视了。而采用Zend Framework框架,哪怕只用它来做类库,总不至于那么快就淘汰掉,而且大公司出品,总能更让人用着放心。    

86    所以,面向对象的程序,我以后还是会基于zend Framework来写。    

87 🎜>

 以上就是PHP编程方式的重新思索(下)的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


Verwandte Etiketten:
Quelle:php.cn
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 Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage