2016-06-15 7 views
3

Ich versuche, eine Funktion innerhalb eines Arrays zu speichern, aber es hält was mir diesen Fehler:PHP-Funktion innerhalb Array

unerwartete 'Funktion' (T_FUNCTION)

ich um im Internet sah aber sie sagen meistens, dass ich PHP Version 5.3 und höher verwenden sollte, während ich 5.6.21 verwende.

Hier ist meine Array:

 static $Events = array(
      'View Page' => array(
       'properties' => array(
        'previous_event', 
        'number_view_page', 
       ), 
       'trigger' => function($foo){ 
        return $foo; 
       }, 
      ), 
     ); 

Wenn jemand weiß, was das Problem ist und wie es zu lösen, bitte helfen Sie mir :)

+1

Es funktioniert nicht, weil es nicht in PHP implementiert ist. http://stackoverflow.com/a/1633024/3595565 – Philipp

Antwort

3

static Werte müssen mit statischen/Konstante Ausdrücke initialisiert werden. Leider sind anonyme Funktionen nicht "konstant" genug, um zu zählen. Spätere PHP-Versionen erlauben einige begrenzte Ausdrücke wie 2 + 4 (weil das Ergebnis immer konstant ist), aber nicht mehr als das. Funktionsdeklarationen sind zu komplex, um in einem Kontext zu behandeln (Sie können eine Funktion dem Array nachträglich zu jeder Zeit hinzufügen, Sie können es so *) nur initialisieren.

* Der Grund für diese Einschränkung ist, dass static Deklarationen in einer anderen Parsing-Phase als Laufzeitcode behandelt werden, und dass Parsing-Phase kann nichts anderes als primitive Werte behandeln.

+0

Ich habe das Event Handling geändert aber trotzdem Danke! Du hast es sehr deutlich erklärt! –

1

Versuchen Sie es erneut mit diesem (Sie 2 haben ,, zu viel am Ende des Codes und entfernen Sie bitte die statische)

EDIT: Hinzufügen von Funktion, so dass Sie das Array aus anderen Klassen verwenden können.

function $events_func() 
{ 
    $events = array(
     'View Page' => array(
      'properties' => array(
       'previous_event', 
       'number_view_page', 
      ), 
      'trigger' => function($foo){ 
       return $foo; 
      } 
     ) 
    ); 
return $events; 
} 
+0

Dies löst nichts, und ich verwende statische, weil dies in einer Helfer-Klasse ist, so dass es in jeder Controller-Funktion –

+0

verwendet werden kann, sollten Sie eine Funktionsmethode in Ihrem Helfer erstellen Klasse, die dieses Array zurückgibt. dann können Sie es in Ihrer Controller-Funktion verwenden. –