Я использую php 5.6, хочу сделать что-то вроде этого:
class FooBar {
public function foo() {
echo "foo!";
array_map($this->bar, [1,2,3]);
}
private function bar() {
echo "bar!";
}
}
(new FooBar)->foo();
Это дает следующую ошибку:
Notice: Undefined property: FooBar::$bar
В качестве альтернативы, можно ли объявить анонимную функцию как атрибут класса? Что-то вроде этого:
class FooBar {
private $bar = function() {
echo "bar!";
}
public function foo() {
echo "foo!";
array_map($this->bar, [1,2,3]);
}
}
(new FooBar)->foo();
Это дает мне следующую ошибку:
Parse error: syntax error, unexpected 'function' (T_FUNCTION)
Я смог получить результат, который был у меня после этого:
class FooBar {
function __construct() {
$this->bar = function() {
echo "bar!";
};
}
private $bar;
public function foo() {
echo "foo!";
array_map($this->bar, [1,2,3]);
}
}
(new FooBar)->foo();
Однако это далеко не идеально; Я не думаю, что эти определения функций принадлежат конструктору - в идеале я бы хотел, чтобы они были методами статического класса.






Вы должны указать контекст для своей функции:
class FooBar {
public function foo() {
echo "foo!";
array_map([$this, 'bar'], [1,2,3]);
}
private function bar() {
echo "bar!";
}
}
(new FooBar)->foo();
Подробнее см. http://php.net/manual/en/language.types.callable.php.