2009-10-27 20 views
12

¿Por qué no es posible inicializar una propiedad a una función cuando declaras la propiedad en php? Los siguientes resultados snippit en un error de Parse: error de sintaxis, T_FUNCTION inesperadaInicializar propiedad de clase con una función anónima

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

Sin embargo, puede inicializar una propiedad en una cadena, número o otros tipos de datos?

Editar:

Pero puedo asignar una función a una propiedad en el método __construct(). Lo siguiente funciona:

<?php 
    class AssignAnonFunctionInConstructor { 
    private $someFunc; 

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

Respuesta

18

Porque no está implementado en PHP.

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

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.

No se pueden inicializar propiedades como esta, las funciones no son valores constantes. De ahí mi respuesta original "no está implementado".

¿Por qué no está implementado? Eso solo puedo adivinar: probablemente es una tarea bastante compleja y nadie ha intervenido para implementarla. Y/o puede que no haya suficiente demanda para una característica como esa.

+0

No es útil o informativo; ¿Cuál es el fondo de por qué no está implementado? – Ophidian

+2

La crítica fue bien merecida, cambié la respuesta para tener un poco más de detalles. –

2

Los cierres no existen en PHP hasta PHP 5.3 (la última versión). Asegúrate de tener PHP 5.3 si quieres hacer esto.

En versiones anteriores, que tipo de puede duplicar esta funcionalidad con la función create_function(), algo así como esto:

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

Donde args $ es una cadena con formato como "$ x, $ yy $ z "y $ code es una cadena de tu código PHP.

+0

Esto está en php 5.3. He actualizado mi pregunta con un caso que funciona (puedo asignar una función a una propiedad en el método __construct magic) –

+0

en php 5.6 la sintaxis en el OP no funciona, create_function() no es lo mismo –

Cuestiones relacionadas