molily: Closures in PHP

Beitrag lesen

Hallo,

Es kommt mir so vor, als würde hier auf ungeheuer komplizierte Art und Weise ein Designfehler von PHP ausgebügelt, nämlich dass es keine privaten Funktionen (also in Funktionen gekapselte Unterfunktionen) gibt. Die fehlen mir oft!

PHP ist eine Scheißsprache, ja, und mit dem Verstreuen von ein wenig funktionalem Zucker wird sie nicht angenehmer. ;)

Private Funktionen gibt es in prozeduralen, nicht funktionalen Sprachen höchstens in der Objektorientierung (Klassendeklarationen). Closures in PHP sollen weniger das Verschachteln von Funktionen ermöglichen, sondern andere Probleme umgehen:

  • Die Standardbibliothek ist weder konsequent objektorientiert noch funktional, es gibt tausende globale Array-Funktionen anstelle einer Array-Klasse.
      - Bei einer Array-Klasse würde Code üblicherweise im Scope der Instanz ausgeführt, Felix hätte also nicht das Verfügbarkeitsproblem.
      - Bei funktionaler Definition der Sortierfunktion wäre es trivial, die Liste durchzuschleifen. Oder sie wäre über die Scope-Chain verfügbar.
  • Das schreckliche Angeben von Callback-Funktionen über ihren Namen als String. Jetzt sind *einige* Funktionen Objekte, andere müssen weiterhin über ihren Namen als String referenziert werden.
  • Die schlechte Definition der Parameter von Callback-Funktionen. Würden die Callbacks der Sortierfunktionen z.B. die Signatur (a, b, array) haben, hätte Felix das Problem nicht. Closures sind hier eine weitere Lösungsmöglichkeit.
  • Das schreckliche Erzeugen von Funktionen zur Laufzeit über Strings, nur um eine Flexibilität zu erreichen, die Closures und Funktionen als First-Class-Citizen ebenfalls mitbringen.

Solche Probleme hat man in anderen Sprachen nicht, die Lambdas oder zumindest Blöcke als integrales Sprachfeature haben.

Mathias

0 56

Array sowohl nach Schlüssel als auch nach Wert sortieren

Felix Riesterer
  • php
  1. 0
    tami
    1. 0
      Felix Riesterer
      1. 0
        tami
  2. 0
    tami
    1. 0
      Felix Riesterer
      1. 0
        Tom
        1. 0
          Felix Riesterer
  3. 0
    Tom
    1. 0

      sowohl nach Schlüssel als auch nach Wert sortieren, Nachtrag

      Tom
      1. 0
        Felix Riesterer
        1. 0
          Tom
          1. 0
            Tom
            1. 0

              Denkfehler zurückgenommen

              Tom
  4. 0
    molily
    1. 0
      Felix Riesterer
  5. 1
    tami
    1. 0
      Tom
      1. 0

        Closures in PHP

        tami
        1. 0
          Tom
          1. 0

            Closures in PHP vs. Javascript - warum "use" ? @molily

            tami
            1. 0
              Tom
              1. 0
                tami
          2. 0
            dedlfix
          3. 2
            Sven Rautenberg
          4. 0
            molily
            1. 0

              Closures in PHP - PHP ist eine "Scheißsprache" ... ???

              tami
              1. 0
                molily
                1. 0
                  tami
            2. 0

              PHP ist eine Scheißsprache - PHP sucks - so what ...

              tami
              1. 0
                molily
                1. 0
                  tami
              2. 0
                Tom
                1. 0
                  molily
                  1. 0
                    molily
                  2. 0
                    Felix Riesterer
                    1. 0
                      Tom
                2. 0
                  Felix Riesterer
              3. 0

                PHP ... "while it's not perfect, it works..."

                tami
            3. 0
              Sven Rautenberg
              1. 0
                Felix Riesterer
                1. 0
                  Tom
                  1. 0
                    Tom
                2. 0
                  tami
                  1. 0
                    molily
                    1. 0
                      tami
                      1. 0
                        Tom
                      2. 0
                        molily
                        1. 0
                          tami
                          1. 0
                            molily
                            1. 0
                              Tom
                        2. 0
                          Tom
                          1. 0

                            Changelogs von PHP

                            dedlfix
                            1. 0
                              Tom
        2. 0
          tami
    2. 0

      Gelöst! Danke!

      Felix Riesterer