Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie veraltete Funktion create_function sinnvoll ersetzen?

Einklappen

Neue Werbung 2019

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

  • Wie veraltete Funktion create_function sinnvoll ersetzen?

    Wie lässt sich die die veraltete Funktion create_function in PHP 7 ersetzen? Ich habe folgenden Code, aber komm grad nicht weiter:

    PHP-Code:
    usort($arraycreate_function('$a,$b'$temp_func));
                                return 
    $array

  • #2
    PHP-Code:
    usort$array, function($val) { ... } ); 
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Danke schon mal! So?:

      PHP-Code:
      usort($array, function($a$b) {
                                  
      $temp_func;
                                  return 
      $array;
                                }) 

      Kommentar


      • #4
        Probiere es doch aus mit eingeschaltetem Error Reporting.
        Kommt ein Fehler stimmt was nicht.

        Kommentar


        • #5
          Zitat von Snake1 Beitrag anzeigen
          Danke schon mal! So?:

          PHP-Code:
          usort($array, function($a$b) {
          $temp_func;
          return 
          $array;
          }) 
          Das kann so nicht funktionieren. Was steckt denn so alles in $temp_func drin?
          Ohne diese Information würde ich pauschal empfehlen für jede Variante von $temp_func gleich eine anonyme Funktion zu erstellen.

          Kommentar


          • #6
            Noch ein Tipp am Rande:

            Wenn du willst dass wir das nachvollziehen, bringe alle Informationen bei. Neben dem Inhalt der Variablen $temp_func, auch ein Beispielarray.
            Auf diese Weise kann man dir auch Hinweise zu möglichen Optimierungen geben.

            Kommentar


            • #7
              Ich weiß selbst noch nicht genau, was die Variablen sind und was sie machen. Habe gehofft, man kann das problemlos umschreiben ohne die Funktion dahinter verstehen zu müssen.

              Kommentar


              • #8
                Dann schau halt ins Handbuch und schreib es wie im ersten Beispiel um oder übernehme das Beispiel und wende es wie in #2 an.

                Da ich nicht weiß, was in $temp_func steht, hier nur mal eine Möglichkeit, wie es eigentlich funktionieren sollte:
                PHP-Code:
                usort(
                    
                $array
                    
                , function ( $a$b ) {
                        
                /* hier der Inhalt aus $temp_func */
                    
                }
                );

                return 
                $array
                Ist aber ungetestet!
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Danke! $temp_func sieht so aus:

                  PHP-Code:
                  $temp_func '
                                              if(!isset($a[\'' 
                  $column '\']) ||!isset($b[\'' $column '\'])) return 1;
                                                  if (is_numeric($a[\'' 
                  $column '\']) && is_numeric($b[\'' $column '\'])) {
                                                      return ' 
                  $faktor ' * (($a[\'' $column '\'] < $b[\'' $column '\']) ? -1 : 1);
                                              } else {
                                                  return ' 
                  $faktor ' * strcmp(strtolower($a[\'' $column '\']),strtolower($b[\'' $column '\'])); 
                  Der Code, der jetzt kommt, funktioniert nicht:

                  PHP-Code:
                  usort(
                                                
                  $array, function($a$b) {
                                                    
                  $temp_func '
                                              if(!isset($a[\'' 
                  $column '\']) ||!isset($b[\'' $column '\'])) return 1;
                                                  if (is_numeric($a[\'' 
                  $column '\']) && is_numeric($b[\'' $column '\'])) {
                                                      return ' 
                  $faktor ' * (($a[\'' $column '\'] < $b[\'' $column '\']) ? -1 : 1);
                                              } else {
                                                  return ' 
                  $faktor ' * strcmp(strtolower($a[\'' $column '\']),strtolower($b[\'' $column '\']));
                                              }
                                              '


                                            }); 
                  Es erscheinen folgende Fehler: 1. Undefined variable: column 2. Undefined variable: faktor
                  Mit weglassen von $temp_func ist es auch nicht getan.

                  Kommentar


                  • #10
                    Ich glaub das ist die richtige Lösung:

                    PHP-Code:
                      usort($array, function($a$b) { $temp_func; });
                                                return 
                    $array

                    Kommentar


                    • #11
                      Das glaub ich eher nicht.
                      Wie alt ist denn das Script wo du das her hast.
                      Ich denke da wird noch viel mit globals umgesetzt.

                      Schau dir mal diesen Beitrag an, der das erklärt: https://cse.unl.edu/~cbourke/wordpress/?p=7

                      Kommentar


                      • #12
                        Das weiß ich nicht. Das Script gehört jemand anderem. Ich denke es ist so aus 2005 oder so. Mit dem Code, wo ich oben genannt habe, wird jedenfalls kein Error und kein Warning angezeigt. Dann werd ich mir das wohl doch noch mal genauer anschauen müssen. Danke für den Tipp!

                        Kommentar


                        • #13
                          Zitat von Snake1 Beitrag anzeigen
                          Danke! $temp_func sieht so aus:
                          Vielen Dank für dieses Beispiel, warum create_function() nicht verwendet werden sollte.

                          So etwas in der Art könnte funktionieren:
                          PHP-Code:
                          usort($array, function($a$b) use($column$faktor) {
                              if(!isset(
                          $a[$column]) || !isset($b[$column])) {
                                  return 
                          1;
                              }
                              if(
                          is_numeric($a[$column) && is_numeric($b[$column])) {
                                  return 
                          $faktor * (($a[$column] < $b[$column]) ? -1);
                              }
                              return 
                          $faktor strcmp(
                                  
                          strtolower($a[$column]),
                                  
                          strtolower($b[$column])
                              );


                          Kommentar


                          • #14
                            Der Code, der jetzt kommt, funktioniert nicht:
                            Natürlich nicht. Das was $temp_func da als String verwurstet must Du als korrekte Syntax aufbauen und in Deine Function an Stelle von $temp_func werfen.
                            Siehe Blars Snippet.
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar

                            Lädt...
                            X