Ankündigung

Einklappen
Keine Ankündigung bisher.

Sicherheit und Stabilität von Funktionen

Einklappen

Neue Werbung 2019

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

  • Sicherheit und Stabilität von Funktionen

    Hallo Zusammen,

    ich würde gerne wissen was der optimale Weg ist eine Funktion und dessen Parameter vernünftig abzusichern.
    Hier möchte ich jedoch keine Unit Tests schreiben, es geht mit hier eher die Frage ob die Parameter außerhalb oder aber innerhalb der Funktion geprüft werden sollten?

    /**
    * param $val int
    */
    function setSomething($val) {
    if (false === is_numeric($val)) { return false; }
    ...
    }

    Um eine Anwort würde ich mich freuen.

    Grüße

    Boris

  • #2
    Hmmmm, mal nachdenken ...........
    Wenn ich eine Funktion mehrfach aufrufe, müsste ich mehrfach vor dem Aufruf die Parameter prüfen, macht das Sinn?
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Eine Prüfung macht immer sinn und erhöht die Sicherheit . Doch ich vermute das Du genau das ansprechen willst was ich denke. Denn wenn ich jedesmal vor dem Funktionsaufruf die Parameter prüfen muss bzw. sollte so wird zuviel Code erzeugt. Der Grundsatz don`t repeat yourself wurde dann verletzt! Sehe ich jedenfalls so.

      Kommentar


      • #4
        Parameter werden natürlich IN der Funktion überprüft, alles andere macht keinen Sinn.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Zitat von Body3000 Beitrag anzeigen
          Eine Prüfung macht immer sinn und erhöht die Sicherheit
          Das habe ich nicht bestritten,

          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            Vielen Dank für die schnelle Antwort von Euch! Ich denke auch das ich die Prüfung immer innerhalb der Funktionen erledige.

            Kommentar


            • #7
              Grundsätzlich soll "robuster Code" geschrieben werden, dh. dein Code muss auch mit fehlerhaften Parametern klarkommen. Unittests machen insofern Sinn, als das man das Verhalten von Code eben auch mit fehlerhaften Parametern überprüfen kann.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Dafür gibt es normalerweise sogenannte TypeHints:

                PHP-Code:
                function foo(array $data) {
                ...

                Welche TypeHints ab welcher PHP-Version nativ unterstütz werden steht hier:

                http://php.net/manual/de/functions.a...pe-declaration

                Die Funktion sollte im Fehlerfall besser kein false, sondern eine Exception werfen oder einen error triggern.

                PHP-Code:
                function foo($val) {
                    if (
                false === is_int($val)) {
                        throw new \
                InvalidArgumentException('foo function only accepts integers.');
                    }

                vg
                jack
                -

                Kommentar


                • #9
                  Zitat von jack88 Beitrag anzeigen
                  Die Funktion sollte im Fehlerfall besser kein false, sondern eine Exception werfen oder einen error triggern.
                  Das würde ich pauschal nicht so sehen, da es von der Aufgabe der Funktion abhängt und zum Teil auch Geschmackssache ist. Die meisten Funktionen aus dem PHP-Kern verhalten sich nicht so.

                  Kommentar


                  • #10
                    Wenn eine Funktion ihre Aufgabe nicht erfüllen kann, weil sie mit dem übergebenen Variablentyp nicht umgehen kann, dann sollte das zu einem Fehler führen. Das entspricht grundsätzlich auch dem Standardverhalten bei TypeHinting in PHP:

                    Wird der Type Hint nicht erfüllt, führt dies zu einem abfangbaren fatalen Fehler.
                    http://php.net/manual/de/language.oop5.typehinting.php

                    False ist für sowas nicht empfehlenswert, auch wenn es oft dafür zweckentfremdet wird.

                    vg
                    jack
                    -

                    Kommentar


                    • #11
                      Zitat von jspit Beitrag anzeigen
                      Das würde ich pauschal nicht so sehen, da es von der Aufgabe der Funktion abhängt und zum Teil auch Geschmackssache ist. Die meisten Funktionen aus dem PHP-Kern verhalten sich nicht so.
                      Eine Funktion sollte nur einen Datentyp zurückliefern. Wenn sie FALSE liefert, kann sie also im Erfolgsfall nur TRUE liefern.

                      Außerdem würde ich mir PHP-Funktionen nicht als Vorbild nehmen, weil die auf uralten Mist basieren.

                      Kommentar


                      • #12
                        Bin kein Fan von einer starken Typisierung für PHP und mit dieser Meinung wohl fast allein auf weiter Flur. Kenne eure Standpunkte und verzichte hier daher auf eine Grundsatzdiskussion.

                        Kommentar


                        • #13
                          Zitat von hellbringer Beitrag anzeigen

                          Eine Funktion sollte nur einen Datentyp zurückliefern.
                          Das wäre nicht immer sinnvoll.

                          vg
                          jack

                          -

                          Kommentar


                          • #14
                            Zitat von jack88 Beitrag anzeigen
                            Das wäre nicht immer sinnvoll.
                            In 99,99999999% der Fälle ist es sinnvoll.

                            Kommentar


                            • #15
                              Und alternativ zB -1 statt false wie bei strpos() und Konsorten?
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X