Tôi muốn viết một hàm thực hiện một số thao tác ghi nhật ký giao dịch, nhưng phạm vi hàm ẩn danh dường như không đăng ký phạm vi cha mẹ $db
và $value
biến. Làm thế nào tôi có thể vượt qua các biến vào đóng cửa?Các biến truy cập từ phạm vi cha mẹ trong hàm PHP ẩn danh
Trớ trêu thay, thẻ SO 'đóng' không mô tả phiên bản PHP của nó rất chính xác ...?
class controller
{
function submit()
{
$db = new database();
$result = $db->execute_tx(function() {
$db->insert_model_a($value_a); // ERROR: $db is non-object
$db->insert_model_b($value_b);
});
}
}
class database
{
function execute_tx($atomic_action)
{
try
{
$this->start();
$atomic_action();
$this->commit();
// etc..
}
catch(...)
{
$this->rollback();
// etc..
}
finally
{
// etc..
}
}
function insert_model_a() { ... }
function insert_model_b() { ... }
}
này là cách duy nhất? Bởi vì tôi có từ 10 đến 15 giá trị trong một số lần gửi và tôi có nhiều lần gửi qua ... – Jake
Có. Bạn phải nhập rõ ràng các biến mà bạn muốn đóng để đóng. – salathe
Đừng quên rằng bạn cũng có thể truyền vào các biến thông qua các đối số hàm bình thường. – salathe