mrjerk: Wann machen Closures in PHP überhaupt Sinn?

Beitrag lesen

Hallo,

Mich würde mal interessieren, wie Closures in PHP überhaupt Sinn machen. Sie nur zu benutzen, damit es kein OOP-"Mäntelchen" gibt, mag vielleicht eine persönliche Entscheidung für "OOP"-"Hasser" sein, das aber hätte im Wiki hier nix verloren. Es gibt keinen Grund, Dinge zu erklären, die man nur machen kann, weil man sie machen kann. Es muss ja einen Vorteil geben. Bei Javscript mag das zB. die Zuweisung einer Funktion zu einem Eventhandler sein, oder die Erzeugung von privaten, memorisierbaren Variablen. All diese Fälle finde ich bei PHP nicht ...;

Ich kann mir da schon Fälle vorstellen, wo das ganz nützlich sein kann, und zwar immer dann, wenn mit callbacks gearbeitet wird, die aber gleichzeitig Daten aus dem umgebenden Scope benötigen.

Vergleiche z.b. das Beispiel von dieser Seite zum Sortieren eines Arrays nach einem beliebigen Attribut:

  
<?php  
function sortBy(&$items, $key){  
  if (is_array($items)){  
    return usort($items, function($a, $b) use ($key){  
      return strCmp($a[$key], $b[$key]);  
    });  
  }  
  return false;  
}  

Die Vergleichsfunktion (function($a, $b)) benötigt Daten aus dem umgebenden Scope ($key).

Natürlich kann man das theoretisch auch anders bauen (man könnte z.b. eine eigene Klasse "Sortable" implementieren, der man dann die benötigten Daten bei der Erzeugung mitgibt o.ä.), aber man spart sich Schreibarbeit, weil man dank Lambda/Closure-Ausdrücken den Callback direkt in den Funktionsaufruf von usort schreiben kann. Macht IMO den Code auch lesbarer, denn man sieht jetzt sofort, dass der Callback zum usort-Aufruf gehört.

Viele Grüße,
Jörg

0 52

Closures und Rekursion

Tom
  • php
  1. 0
    1UnitedPower
    1. 0
      tami
      1. 0
        1UnitedPower
        • javascript
        1. 0
          tami
    2. 0
      Tom
      1. 0
        tami
      2. 0
        1UnitedPower
        1. 0
          Tom
          1. 0
            tami
  2. 0
    tami
    1. 0

      Closures und Rekursionm, please Pimp my Knowledge

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

                Wann machen Closures in PHP überhaupt Sinn?

                tami
                1. 0
                  Tom
                  1. 0
                    tami
                    1. 0
                      Tom
                      1. 0
                        tami
                2. 0
                  mrjerk
                  1. 0
                    tami
                    1. 0

                      Closures im Zend Framework

                      tami
                      1. 0
                        Tom
                        1. 0
                          tami
                      2. 0
                        tami
                        1. 0
                          tami
                          1. 2
                            1UnitedPower
                            • zu diesem forum
                            1. 0
                              tami
                              1. 0

                                Closures im Zend Framework und bei php.net

                                tami
                                1. 0

                                  Closures im Zend Framework und bei php.net = anonyme Funktionen

                                  tami
                                  • php
                                  1. 0
                                    tami
                    2. 0
                      Tom
                      1. 0
                        tami
            2. 0
              Tom
              1. 0
                tami
              2. 0
                tami
                1. 0
                  Tom
                  1. 0
                    tami
  4. 0

    Closures und Rekursion. into the depth

    Tom
    1. 0
      tami
    2. 0
      1UnitedPower
      1. 0

        Fehler gefunden

        Tom
        1. 0
          1UnitedPower
    3. 0
      Tom
      1. 0

        New messages from "dem schönen Oberharz" (Forumsidee!)

        Matthias Apsel
        • zu diesem forum