3 ms·
Closures inside property initializations inside the class body don't work. Not even in an array. So this code throws up a "Parse error: syntax error, unexpecte
by yuri41 14y ago
Closures inside property initializations inside the class body don't work. Not even in an array.
So this code throws up a "Parse error: syntax error, unexpected 'function' (T_FUNCTION)"
class User
{
public static $mapping = array(
'username' => array(
'type' => 'string',
'length' => 32,
'unique' => true,
'nullable' => function() {
// Some logic to determine value.
}
)
);
}
- stevencorona 14y agoCame here to post the same thing. I don't know if it has been fixed in 5.4, though.
- robryan 14y agoNope, the parser seems to be pretty brittle around this. Someone who knows more about the internals can probably explain why this works: class User { public $mapping = array( 'username' => array( 'type' => 'string', 'length' => 32, 'unique' => true, ) ); public function __construct() { $this->mapping['nullable'] = function() { echo "test"; }; $this->mapping['nullable'](); } } $user = new User(); And this doesn't: class User { public static $mapping = array( 'username' => array( 'type' => 'string', 'length' => 32, 'unique' => true, ) ); public static function set() { self::$mapping['nullable'] = function() { echo "test"; }; self::$mapping['nullable'](); } } User::set();
- TazeTSchnitzel 14y agoI used to be interested in helping fix PHP, but I gave up. The reason is because Rasmus and a few others seem to think that using the syntax definition to do your type checking for you is a good idea, and that the hundreds of possible cases they didn't think of, don't matter.
- snorkel 14y agoDon't need to inline the function, it could instead just be a reference to static member of the same class: ... 'nullable' => self::getNullable, ...
- pierredup 14y ago'nullable' => self::getNullable also won't work in any version of PHP