Функциональный литерал в классе PHP

Посмотрите на этот код, пожалуйста:

$array = array(
'action' => function () { echo "this works"; }
);

class Test {
public $array = array(
"action" => function () { echo "this doesn't"; }
);
}

Первый литерал функции анализируется нормально, но второй — тот, что находится внутри класса — вызывает синтаксическую ошибку:

Ошибка разбора: синтаксическая ошибка, неожиданная «функция» (T_FUNCTION) …

Может кто-нибудь объяснить это мне? Это ошибка?

РЕДАКТИРОВАТЬ: Это последний PHP: 5.6.6

3

Решение

Из класса это собственность!

Правило из свойств:

Декларация может включать инициализацию, но это
инициализация должна быть постоянное значение—то есть он должен быть в состоянии
быть оценивали в время компиляции и должен не зависит от времени выполнения
информация для оценки.

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

7

Другие решения

У меня нет возможности протестировать Ваш код на PHP 5.6.6, но я думаю, что этот код решит Вашу проблему.

class Test{

public $array;

function __construct(){

$this -> array = array(

'action'    =>  function (){

echo 'It works too';
}
);
}
}

$test = new Test();
$test -> array['action']();
4

Попробуйте вот так, дайте мне знать, если это работает для вас

<?php
$array = array('action' => function () { echo "this works"; });
class Test {
public $arr;
function __construct() {
$this->arr = array("action" => function () { echo "this works too"; });
}
function getArr(){
var_dump($this->arr);
}
}

var_dump($array);
$obj = new Test();
$obj->getArr();
0
По вопросам рекламы [email protected]