में पैरेंट स्कोप से एक्सेस चर, मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो लेन-देन लॉगिंग करने वाले कुछ गंदे काम करता है, लेकिन अज्ञात फ़ंक्शन स्कोप पेरेंट स्कोप $db
और $value
चर पंजीकृत करने के लिए प्रतीत नहीं होता है। मैं चर को कैसे बंद कर सकता हूं?गुमनाम PHP फ़ंक्शन
विडंबना यह है कि एसओ टैग 'क्लोजर' इसका 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() { ... }
}
यही एक रास्ता है? क्योंकि मुझे कुछ सबमिट में 10 से 15 मान पसंद हैं और मेरे पास कई सबमिट करने के लिए सबमिट किया गया है ... – Jake
हां। आपको उन चरों को स्पष्ट रूप से आयात करना होगा जिन्हें आप बंद करना बंद करना चाहते हैं। – salathe
यह न भूलें कि आप सामान्य फ़ंक्शन तर्कों के माध्यम से चर में भी पास कर सकते हैं। – salathe