Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Argument immer als Variable?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • BrightBit
    hat ein Thema erstellt [Erledigt] Argument immer als Variable?.

    [Erledigt] Argument immer als Variable?

    Hallo,

    ich arbeite mich gerade durch den Quellcode eines Loginsystems. Der Autor packt darin sehr häufig Argumente in Variablen, bevor er sie einer Funktion übergibt. Beispiel:

    Code:
    $field = "pass";
    $form->setError($field, "* Invalid password");
    Hat die folgende Variante irgendwelche Nachteile gegenüber der vorherigen?

    Code:
    $form->setError("pass", "* Invalid password");

  • Tropi
    antwortet
    Dann bringt es keine besonderen Vorteile. Maximal die Lesbarkeit wird in einigen Fällen verbessert. Vergleiche z.B. die Funktion [MAN]imagettftext[/MAN]:
    Code:
    imagettftext ( resource $im , int $size , int $angle , int $x , int $y , int $col , string $fontfile , string $text )
    Der Aufruf:
    PHP-Code:
    imagettftext ($imageRessource$fontSize$angle$x$y$color$font$text
    ist wohl um einiges aussagekräftiger als:
    PHP-Code:
    imagettftext ($imageRessource10101010$color$font$text
    Wenn du jetzt die Schriftgröße ändern wollen würdest, müsstest du:
    - bei 1.: Einfach $size verändern
    - bei 2.: Ganz sicher im Handbuch nachschauen damit du weißt welche "10" denn für die Schriftgröße steht.

    Aber technisch bringt es keinerlei Vorteile Variablen vor einem Funktionsaufruf zu initialisieren.

    Einen Kommentar schreiben:


  • BrightBit
    antwortet
    Danke Tropi. Jetzt habe ich es verstanden, aber auch das kann ich verneinen. Er benutzt den Wert der Variablen immer nur ein einziges Mal. Das mit den Referenzen hatte ich bereits nachgesehen. Aus Unsicherheit musste ich trotzdem nochmal nachfragen. Trotzdem danke für den Link zum Handbuch.

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    Dein Beispiel war:
    PHP-Code:
    $field "pass";
    $form->setError($field"* Invalid password"); 
    Der Code könnte als Ganzes aber auch so ausgesehen haben:
    PHP-Code:
    $field "pass";
    $form->setError($field"* Invalid password");
    ...
    ...
    $form->makeLabel($field);
    ...
    beliebigeFunktion($field); 
    Wenn du jetzt das erste Vorkommen bei setError() durch den Wert "pass" ersetzt, werden die restlichen Funktionsaufrufe Fehler werfen (weil $field undefiniert ist). Daher zuerst im Editor nach (der Anzahl von) Vorkommnissen von $field suchen, damit du sicher gehst das diese Variable nicht wo anders doch noch gebraucht wird. Deswegen auch nochmal die Betonung auf "wenn das alles ist".

    Ja, Referenzen als Parameter haben ein & davor. Eigentlich steht aber alles Wissenswerte dazu schon im Handbuch beschrieben: http://php.net/manual/de/language.references.pass.php

    Einen Kommentar schreiben:


  • BrightBit
    antwortet
    Danke für die schnellen Antworten

    @Tropi: Deine Antwort verstehe ich nicht. Wobei gehen Editoren oder IDEs sicher, wenn sie nach den Vorkommen einer Variablen suchen und wieso sollte ich aufpassen, wenn eine Variable mehr als einmal vorkommt?

    @lstegelitz: Werden Referenzen in PHP dadurch gekennzeichnet, dass sie mit einem Kaufmanns-Und beginnen? In dem Fall hätte der Autor die Variable also weglassen können, weil er keine Referenzen zu verwenden scheint?

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    PHP-Code:
    $form->setError($field"* Invalid password"); 
    Falls die Methodensignatur für den ersten Parameter eine Referenz vorgibt, gibt es keinen anderen Weg.

    Einen Kommentar schreiben:


  • Tropi
    antwortet
    Zitat von erc Beitrag anzeigen
    Wenn das alles ist
    ...Um dabei sicher zu gehen, können viele Editoren/IDEs nach den Vorkommen einer Variablen suchen. Bei mehr als einem Vorkommen solltest du schon aufpassen. (Eventuell ist zusätzliche Vorsicht angebracht wenn die Datei includet wird.)

    Einen Kommentar schreiben:


  • erc
    antwortet
    Wenn das alles ist? Nein...

    Einen Kommentar schreiben:

Lädt...
X