PHP Adventskalender 2016 Dies ist der Artikel am 20. Tag.
Der Artikel Schreiben von robustem Code in PHP7 ist zu einem heißen Thema geworden. Ich habe nur die Folien gesehen, aber es gab viele Dinge, mit denen ich sympathisierte. Vor diesem Hintergrund habe ich versucht herauszufinden, worauf ich achte und was ich bei der Entwicklung mit PHP mache.
Ursprünglich hatte ich langjährige Erfahrung mit Java und habe IntelliJ IDEA verwendet, daher entwickle ich mit PhpStorm vom selben Ort aus. Es ist eine Geschichte, dass Sie mit dieser Funktion Code schreiben können, der in gewissem Maße Java ähnelt.
Wenn Sie es aus dem Symfony-Container nehmen, haben Sie möglicherweise Probleme, den Typ und die Methode zu kennen. In einem solchen Fall erkennt PhpStorm den Typ der Variablen und vervollständigt die Methode usw., wenn Sie die lokale Variable wie unten gezeigt kommentieren.
Es ist ein Zitat von http://symfony.com/doc/current/service_container.html, aber wenn es wie folgt belassen wird, wird die Sendemethode von "$ mailer" nicht abgeschlossen.
class HelloController extends Controller
{
// ...
public function sendEmailAction()
{
$mailer = $this->get('app.mailer');
$mailer->send('[email protected]', ...);← Ich kenne den Typ nicht. Wenn es sich also um PhpStorm handelt, wird eine Warnung angezeigt.
}
}
Wenn Sie Folgendes tun, wird die Warnung ausgeblendet und die Methode der Mailer-Klasse wird als Abschlusskandidat in "$ mailer" angezeigt.
/* @var $mailer AppBundle\Mailer */
$mailer = $this->get('app.mailer');
Zum Beispiel, wenn Sie ein Array mit einem bestimmten Typ schreiben möchten, z. B. "Array von Zeichenfolgen" oder "Array von Klassen, die Sie in phpdoc erstellt haben". Wenn Sie neu in Java sind, werden Sie es wollen.
* @return string[]
* @return Sample[]
Wenn Sie also XXX [] ausführen, ist dies in Ordnung.
Sie können herausfinden, wo eine Methode aufgerufen wird, indem Sie nach Alt + F7 suchen (Verwendungen im Kontextmenü suchen) und auflisten. Dies ist nützlich, um herauszufinden, inwieweit sich das Fixieren einer Methode auswirkt und wie sie verwendet wird.
public function isXXX() {...}← Konzentrieren Sie sich auf den Methodennamen Alt+F7 oder Rechtsklick
Hinweis Wenn es für eine Vorlage wie z. B. twig verwendet wird oder wenn PhpStorm so verwendet wird, dass der Typ nicht bestimmt werden kann (z. B. wenn es mit einem Symfony-Service-Container abgerufen wird), wird es nicht in den Suchergebnissen angezeigt. Solche Fälle können nur durch eine Zeichenkettensuche im Projekt erfasst werden. Strg + Umschalt + F öffnet diesen Dialog.
Beim Ändern oder Hinzufügen von Funktionen gibt es Fälle, in denen alte und neue Klassen aufgrund von Arbeit und Spezifikationen nebeneinander existieren (z. B. altes Routing bleibt erhalten und wird an eine neue URL umgeleitet). Zu diesem Zeitpunkt besteht eine Lösung darin, "@ veraltet" hinzuzufügen, um das Verständnis von Alt und Neu zu erleichtern. Darüber hinaus können Sie mit "@ see" eine Route erstellen, die auf eine neue Klasse verweist. Konzentrieren Sie sich auf den Klassennamen bei "@ see" und drücken Sie Strg + B (Verknüpfung zum Aufrufen des Deklarationsteils), um die Klasse zu öffnen.
@veraltete alte Fabrikklasse
@siehe NewFactory Neue Fabrikklasse
public class OldFactory {
}
Da "@ veraltet" an eine Methode angehängt werden kann, habe ich sie ad hoc und unvermeidlich erstellt, aber es scheint, dass sie auch verwendet werden kann, um zu appellieren, dass ich nicht möchte, dass sie anderweitig verwendet wird.
@veraltet Bitte verwenden Sie es nicht in Neuentwicklungen, da es zu viele Nebenwirkungen hat und es gefährlich ist, es nicht mehr zu verwenden
public function dirty_method() {...}
In jedem Fall ist es jedoch eine wichtige Voraussetzung, dass das Team ein gutes Verständnis dafür hat, wie diese verwendet werden und welche Art von Kommentaren zu hinterlassen sind.
Öffnen Sie die Datei, deren Schuld oder Verlauf angezeigt werden soll, klicken Sie mit der rechten Maustaste auf> Git> Kommentieren, um die Git-Schuld anzuzeigen, und auf Verlauf anzeigen, um eine Liste der vergangenen Festschreibungsverläufe anzuzeigen.
Dies ist nützlich, wenn Sie aus dem Festschreibungskommentar Informationen darüber erhalten möchten, in welches Ticket der Prozess eingegeben wurde und wofür der Prozess bestimmt ist, oder um zu sehen, wer ihn geschrieben hat.
Wie bei GitHub können Sie auch von der Schuld auf den Unterschied des entsprechenden Commits übergehen. Dies ist nützlich, wenn Sie keinen Git-Repository-Browser haben oder nur etwas wollen.
https://github.com/JetBrains/phpstorm-Laden Sie Stubs herunter und wechseln Sie in das Standardverzeichnis.Preferences | Languages & Frameworks | PHP | Include path
Hinzugefügt zu.
Einige Warnungen kommen heraus, weil sie mit der ursprünglichen in Konflikt stehen, aber wenn Sie nichts dagegen haben, irgendwie.
Es ist eine abgenutzte Geschichte, aber ich bin in dieser Hinsicht schon oft gefangen, deshalb kann ich sie nicht organisieren.
Es ist eine Geschichte, dass unerwartete Ergebnisse aufgrund eines losen Vergleichs durch ==
erhalten werden. Standardmäßig wird in PhpStorm beim Vergleich mit ==
eine Warnung angezeigt, sodass es bis zu einem gewissen Grad leicht zu bemerken ist, aber es passt, wenn es passt. Wenn Sie also das Muster des Problems kennen, ist es die Ursache, wenn Sie darauf stoßen Es ist leicht zu erreichen.
Es scheint so berühmt zu sein, dass es super wird.
$a = '2a';
$b = 2;
print ($a == $b);
// => true
Wie oben erwähnt, ist es ein Phänomen, dass die Zeichenkette "2a" und die Zahl "2" gleich sind.
Dies kann vermieden werden, indem ein strikter Vergleich einschließlich des Typs mit ===
durchgeführt wird.
Es scheint berühmt für den Vergleich von Hash-Werten von md5 zu sein.
$a = '0e678342453'
$b = '0e123435465'
print ($a == $b);
// => true
Es ist ein Phänomen, dass die Zeichenketten völlig anders aussehen, aber gleich sind. Was passiert ist, dass das e als Exponentialschreibweise interpretiert wird.
Da "0 ^ 673 = 0 = 0 ^ 123" ist, sind beide 0, was einem losen Vergleich entspricht.
Dies kann auch durch Vergleich mit ===
vermieden werden.
Da der Vergleich der switch-Anweisungen in case ==
ist, ist es leicht, im obigen Problem stecken zu bleiben.
Die folgenden Artikel sind gut organisiert. Bitte beziehen Sie sich auf sie.
Sechs Dinge, die PHPer über switch-Anweisungen wissen sollte