Chcę napisać funkcję, która wykonuje pewną brudną pracę podczas rejestrowania transakcji, ale zakres anonimowy funkcji nie wydaje się rejestrować zmiennych rodzica $db
i $value
zmiennych. Jak mogę przekazać zmienne do zamknięcia?Dostęp do zmiennych z zakresu nadrzędnego w anonimowej funkcji PHP
Jak na ironię, znaczek SO "zamknięcia" nie opisuje bardzo dokładnie wersji PHP ...?
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() { ... }
}
Czy to jest jedyny sposób? Ponieważ w niektórych przypadkach mam od 10 do 15 wartości i mam wiele zgłoszeń do przejrzenia ... – Jake
Tak. Musisz jawnie zaimportować zmienne, które mają zostać zamknięte. – salathe
Nie zapominaj, że możesz przekazywać zmienne za pomocą normalnych argumentów funkcji. – salathe