2009-10-27 10 views
12

Warum ist es nicht möglich, eine Eigenschaft zu einer Funktion zu initialisieren, wenn Sie die Eigenschaft in PHP deklarieren? Die folgenden snippit Ergebnisse in einem Parse-Fehler: Syntaxfehler, unerwartete T_FUNCTIONInitialisiere Klasseneigenschaft mit einer anonymen Funktion

<?php 
    class AssignAnonFunction { 
    private $someFunc = function() { 
     echo "Will Not work"; 
    }; 
    } 
?> 

Doch Sie eine Eigenschaft auf eine Zeichenfolge, Zahl oder andere Datentypen initialisieren können?

Edit:

Aber ich eine Funktion auf eine Eigenschaft in der __construct() -Methode zuweisen kann. Folgendes funktioniert:

<?php 
    class AssignAnonFunctionInConstructor { 
    private $someFunc; 

    public function __construct() { 
     $this->someFunc = function() { 
     echo "Does Work"; 
     }; 
    } 
    } 
?> 

Antwort

18

Weil es nicht in PHP implementiert ist.

http://www.php.net/manual/en/language.oop5.properties.php. Quote:

They (properties) are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

Sie können solche Eigenschaften nicht initialisieren, Funktionen sind keine konstanten Werte. Daher meine ursprüngliche Antwort "es ist nicht implementiert".

Warum ist es nicht implementiert? Das kann ich nur raten - es ist wahrscheinlich eine ziemlich komplexe Aufgabe und niemand hat sich dazu durchgerungen. Und/oder es gibt möglicherweise nicht genug Nachfrage für ein solches Feature.

+0

Nicht hilfreich oder informativ; Was ist der Hintergrund dafür, warum es nicht implementiert ist? – Ophidian

+2

Kritik war gut verdient, änderte ich die Antwort etwas mehr Details zu haben. –

2

Verschlüsse sind in PHP bis PHP 5.3 (die neueste Version) nicht vorhanden. Stellen Sie sicher, dass Sie PHP 5.3 haben, wenn Sie dies tun möchten.

In früheren Versionen können Sie eine Art doppelte diese Funktionalität mit dem create_function() Funktion, etwa wie folgt aus:

$someFunc = create_function($args,$code); 
$someFunc(); 

Wo $ args eine Zeichenkette wie „$ x, $ y, $ z formatiert ist "und $ code ist eine Zeichenfolge Ihres PHP-Codes.

+0

Dies ist in PHP 5.3. Ich habe meine Frage mit einem Fall aktualisiert, der funktioniert (ich kann einer Eigenschaft in der __construct magic-Methode eine Funktion zuweisen) –

+0

in PHP 5.6 funktioniert die Syntax im OP nicht, create_function() ist nicht dasselbe –

Verwandte Themen