2009-10-27 45 views
12

Perché non è possibile inizializzare una proprietà su una funzione quando si dichiara la proprietà in php? I seguenti risultati snippit in un errore di Parse: errore di sintassi, inaspettata T_FUNCTIONInizializza la proprietà della classe con una funzione anonima

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

Eppure è possibile inizializzare una proprietà da una stringa, numero o altri tipi di dati?

Edit:

Ma posso assegnare una funzione a una proprietà nel metodo __construct(). Quanto segue funziona:

<?php 
    class AssignAnonFunctionInConstructor { 
    private $someFunc; 

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

risposta

18

Perché non è implementato in PHP.

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

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.

Non è possibile inizializzare proprietà come questa, le funzioni non sono valori costanti. Da qui la mia risposta originale "non è implementata".

Perché non è implementato? Che posso solo supporre - probabilmente è un compito abbastanza complesso e nessuno ha intensificato per implementarlo. E/o potrebbe non esserci abbastanza richiesta per una funzione del genere.

+0

Non utile o informativo; qual è lo sfondo per cui non è implementato? – Ophidian

+2

La critica è stata ben meritata, ho cambiato la risposta per avere qualche dettaglio in più. –

2

Le chiusure non esistono in PHP fino al PHP 5.3 (l'ultima versione). Assicurati di avere PHP 5.3 se vuoi farlo.

Nelle versioni precedenti, è possibile una sorta di duplicare questa funzionalità con la funzione create_function(), un po 'come questo:

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

dove $ args è una stringa formattata come "$ x, $ y, $ z "e $ code è una stringa del tuo codice PHP.

+0

Questo è in PHP 5.3. Ho aggiornato la mia domanda con un caso che funziona (posso assegnare una funzione a una proprietà nel metodo magico __construct) –

+0

in php 5.6 la sintassi nell'OP non funziona, create_function() non è la stessa cosa –

Problemi correlati