Warum den PHP-Variablentyp in einem Kommentar deklarieren?

Lesezeit: 6 Minuten

Benutzer-Avatar
stefmichail

Ich bin ziemlich neu in PHP und habe gerade angefangen, NetBeans zu verwenden, um meinen PHP-Code zu entwickeln.

Aus heiterem Himmel, als ich eine Variable in eine Abfrage eingab, tauchte ein Dialog auf und forderte mich auf, einen Kommentar zu vervollständigen, um den Variablentyp zu speichern. Ich habe einige Nachforschungen angestellt und festgestellt, dass dies ein beliebtes Feature von NetBeans zu sein scheint, aber ich konnte keine Informationen finden, die mir das erklären könnten warum dies war der Fall.

Warum sollte jemand den Typ einer PHP-Variablen in einen Kommentar einfügen? Ist es für Entwicklungszwecke oder kommt es tatsächlich dem Code selbst zugute? Ist es integriert oder optional?

  • Kannst du ein Beispiel posten, was du meinst?

    – Aurelio DeRosa

    22. Oktober 2011 um 17:36 Uhr

  • @AurelioDeRosa – Hier ist ein Link zu der Seite, die die Funktion beschreibt: blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a

    – stefmichail

    22. Oktober 2011 um 17:42 Uhr

  • Oh … jetzt verstehe ich, was du meinst. Nun, die Antwort von Jonathan Spooner ist die richtige.

    – Aurelio DeRosa

    22. Oktober 2011 um 17:43 Uhr

  • Die allgemeine Antwort lautet, dass die automatische Vervollständigung funktioniert, und da PHP schwach typisiert ist, gibt es für Ihre IDE keine Möglichkeit, zu wissen, welchen Typ eine Variable hat, ohne den Code auszuführen, was, gelinde gesagt, nicht realisierbar ist. Beim Bearbeiten von Java-, C- oder C++-Dateien ist dies nicht erforderlich, da der Variablentyp in seiner Deklaration definiert ist.

    – Netcoder

    22. Oktober 2011 um 17:59 Uhr

  • Beantwortet das deine Frage? Wie deklariere ich den Typ für lokale Variablen mit der PHPDoc-Notation?

    – Oleg

    8. Mai 2021 um 19:17 Uhr

Benutzer-Avatar
Jonathan Spooner

Hinzufügen des Typs in a @var -Tag im Kommentar Ihrer Methode ermöglicht es NetBeans, Ihnen die Codevervollständigung anzuzeigen. Dies ist natürlich optional, aber es ist immer eine gute Idee, Ihren Code vollständig zu dokumentieren.

Bearbeiten: Ein Tipp für NetBeans zum automatischen Generieren der Kommentare für Sie ist die Verwendung der /** Erweiterung. Platzieren Sie dazu einfach den Cursor über der Eigenschaft oder Methode, die Sie dokumentieren und eingeben möchten /** und drücken Sie dann die ENTER Schlüssel. Dadurch wird ein Kommentar im phpDoc-Stil erweitert und die entsprechenden Tags hinzugefügt.

Bearbeiten 2:
Du kannst den … benutzen @var -Tag auf einer Eigenschaft und Sie können die verwenden @param -Tag für eine Methode, um den gleichen Effekt mit Parametern zu erzielen, die an eine Methode übergeben werden.

Verwendung der @var -Tag auf einer Eigenschaft gibt Ihnen Codehinweise, während Sie die Eigenschaft überall dort verwenden, wo sie sichtbar ist:

/**
 *
 * @var My_Type
 */
private $_myProperty;

Verwendung der @param -Tag für eine Methode gibt Ihnen Codehinweise, während Sie den Parameter innerhalb der Methode verwenden:

/**
 *
 * @param My_Type $obj 
 */
public function myMethod($obj) {

}

Eine andere Möglichkeit, einen ähnlichen Effekt zu erzielen und gleichzeitig ein gewisses Maß an Typsicherheit zu bieten, ist die Verwendung von PHPs geben Sie Hinweise ein Mechanismus:

public function myMethod(My_Type $obj) {

}

Beachten Sie, dass diese Methode den in der Methodensignatur angegebenen Typ hat. NetBeans stellt jetzt die gleiche Codevervollständigung innerhalb der Methode bereit, die mithilfe von verfügbar ist @param Tag und PHP erzeugt eine E_RECOVERABLE_ERROR wenn der an die Methode übergebene Typ nicht derselbe Typ ist, der angegeben wurde. Sehen PHP-Dokumentation zu Fehlern und wie Sie damit umgehen, wenn Sie mehr über den obigen Fehler erfahren möchten.

  • In meinem Fall habe ich eine Variable des Namens $clause und ich weiß durch die Verwendung gettype($clause) dass der Typ ist string aber die Autovervollständigung in NetBeans hat es nicht string als eine Option. Ist es in NetBeans unter einem anderen Namen? Können Sie mir ein Beispiel für die Syntax für meinen Fall geben?

    – stefmichail

    22. Oktober 2011 um 17:44 Uhr

  • Das var-Tag unterstützt nur die Codevervollständigung für benutzerdefinierte Typen oder Klassen, die in der PHP-Bibliothek enthalten sind. Siehe Bearbeiten für einen Tipp

    – Jonathan Spooner

    22. Oktober 2011 um 17:47 Uhr


  • Danke, aber ich habe immer noch Probleme, einen Typ für meine Variable auszuwählen. Gibt es irgendwo Dokumentation, die die Typen von Variablen beschreiben kann? Alle in NetBeans verfügbaren Optionen sind mir fremd, und ich bin mir nicht sicher, welche ich wählen soll. Wie gesagt, ich habe verwendet gettype um den Variablentyp zu finden $clause wie string. Doch es gibt keine string als Option eingeben. Wende ich die falsche Methode an?

    – stefmichail

    24. Oktober 2011 um 18:51 Uhr

  • Das string Typ, den Sie sehen, ist das, in das PHP die Variable umgewandelt hat. es ist ein primitiver Typ und keine Klasse, daher werden in NetBeans keine Codehinweise ausgeführt. Sehen php.net/manual/en/language.types.intro.php für eine Liste der primitiven Typen. Sehen manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/… für die phpDoc @var-Tag-Dokumentation

    – Jonathan Spooner

    24. Oktober 2011 um 19:28 Uhr

  • Wollen Sie damit sagen, dass ich in meinem Fall den Codehinweis nicht verwenden kann? Tut mir leid, ich verstehe diese Funktion nicht ganz. Wenn ich die Funktion verwenden kann, was würde ich als Code eingeben?

    – stefmichail

    24. Oktober 2011 um 19:41 Uhr


Ich vermute du redest von sowas:

/**
 * @var SimpleXMLElement $xml
 */
private $xml;

Dies wird so genannt phpDoc-Kommentar. Es ermöglicht Ihnen, API-Dokumentation zu generieren (wie dieser zum Beispiel). Darüber hinaus unterstützen die meisten IDEs, einschließlich Eclipse und NetBeans, diese Syntax und bieten dynamische Codevervollständigung usw.

Benutzer-Avatar
Kat

Wenn Sie den Typ einer Variablen in dem Fall deklarieren möchten, in dem die Variable keine Klasseneigenschaft ist, sondern nur eine Variable, die einen Rückgabewert enthält, verwenden Sie Kommentare mit einem Stern, gefolgt von @var, gefolgt von Ihrem Variablennamen und schließlich gefolgt vom Typ dieser Variablen. Zum Beispiel:

/* @var $errorMessage NotificationMessage */
$errorMessage= $allMessages->rewind()->current();

teilt NetBeans oder PhpStorm mit, dass $errorMessage eine Instanz von NotificationMessage ist, und Sie sollten die Codevervollständigung für diese Variable erhalten.

  • Das ist falsch – Typ sollte vor dem Variablennamen stehen: docs.phpdoc.org/latest/references/phpdoc/tags/var.html

    – Oleg

    3. März 2020 um 11:35 Uhr


  • @Oleg bitte vor dem Posten genauer lesen. Meine Antwort bezog sich auf NetBeans- oder PhpStorm-Anmerkungen, nicht auf einige PHP-Dokumentationsstandards. Und es ist von vor 4 Jahren, obwohl sich die Dinge möglicherweise geändert haben, hätten Sie einen Link zu NetBeans- oder PHPStorm-Dokumenten posten sollen. Ihr Link führt zu “Seite nicht gefunden”.

    – Kat

    5. Mai 2021 um 10:56 Uhr

  • Wenn die Antwort veraltet ist, aktualisieren Sie sie bitte oder entfernen Sie sie

    – Oleg

    6. Mai 2021 um 16:29 Uhr

  • PHPStorm schätzt “einige” PHP-Standards jetbrains.com/help/phpstorm/phpdoc-comments.html#344b8ee0 die auch als PSR-5 bekannt sind: PHPDoc github.com/phpDocumentor/fig-standards/blob/master/proposed/…

    – Oleg

    3. Juni 2021 um 19:45 Uhr


Obwohl Netbeans es für die automatische Vervollständigung verwenden, ist es oft nützlich, um Ihren Code zu dokumentieren:

In diesem Fall wissen Sie, was diese Methode bekommt und was sie zurückgibt, aber innerhalb des Codes haben Sie keine Ahnung, was passiert

/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    $factoredObj = getObject($someObj); //you are not sure what type it returns
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

Sie können es mit kommentieren /* @var $variable type */ innerhalb des Codes

/**
 * Returns some stuff
 * @param string $someObj
 * @return array
 */
public function someMethod($someObj) {
    /* @var $factoredObj someType */
    $factoredObj = getObject($someObj);
    $resultArray = $factoredObj->toArray();
    return $resultArray;
}

oder

$factoredObj = getObject($someObj); /* @var $factoredObj someType */

Da PHP eine loose/duck-typisierte Sprache ist, können diese Typhinweise Ihnen oder anderen helfen, zu verstehen, was vor sich geht, wenn Sie ein großes Programm erstellen, falls ein Problem auftreten sollte. Erwarten Sie beispielsweise einen gemischten Typ und senden Sie eine Ganzzahl.

1093480cookie-checkWarum den PHP-Variablentyp in einem Kommentar deklarieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy