@Hellek
Люблю говорить и слышать суть

Почему нельзя передавать свойство текущего объекта в замыкание?

Приветствую коллеги. Помогите разобраться в тонкостях языка. Второй час не могу найти ничего даже близко похожего. Мануал с SO все уже вычитал)) Ошибка следующая:
PHP Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ')', Судя по всему в этом месте $this->db
Код:
class Orders {
	function __construct(Database $db) {
		$this->db = $db;
	}

	function createOrder(array $data) {
		$this->db->transaction(function($this->db) { // ошибка в этой строке
			$id1 = $this->db->insert('...');
			$id2 = $this->db->insert('...');
			$res = $this->db->update('...');
		});
	}
}
$orders = new Orders($db);


function createOrder(array $data) {
	$db = $this->db;
	$this->db->transaction(function($db) { // Так работает
	$this->db->transaction(function() use ($db) { // И так тоже
		$id1 = $this->db->insert('...');
		$id2 = $this->db->insert('...');
		$res = $this->db->update('...');
	});
}

Это нафиг не удобно вообще, в каждом методе прегонять в локальную переменную $db = $this->db, сейчас их 5, а когда будет 25, это же кабзда.
  • Вопрос задан
  • 316 просмотров
Решения вопроса 2
начиная с пхп 5.4 у тебя $this доступен внутри анонимной функции объявленной внутри класса.
не надо ничего туда передавать.
Ответ написан
@miki131
Ты пишешь параметр функции, а не передаешь его туда$this->db
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы