इंस्टॉलर स्क्रिप्ट में $ इंस्टॉलर v $ का उपयोग


17

ठीक है, स्थापित स्क्रिप्ट का उपयोग करते हुए निम्नलिखित का उपयोग करने के लिए एक अजीब सम्मेलन लगता है:

$installer = $this;

मैं वास्तव में इसे नहीं समझता क्योंकि यह पूरी तरह से बेमानी है।

सिर्फ $this->लिपि में ही क्यों इस्तेमाल करें ?

इस सम्मेलन में कोई विचार क्यों मौजूद है?


मुझे इसके बारे में चेतावनी मिलती है कि इसका उपयोग vscode में वस्तु संदर्भ के बाहर किया जा रहा है। किसी भी विचार मैं इसे कैसे ठीक करूं?
हेनरी की कैट

जवाबों:


11

इसका उत्तर बहुत सरल है। 2007 में (और मुझे विश्वास है कि 2009 तक जब PhpStorm ने पत्थरबाजी शुरू की थी) किसी भी एक IDE को इनलाइन phpdoc प्रदान करने की अनुमति नहीं थी $this। लेकिन कोर डेवलपर्स चाहते थे कि आईडीई में ऑटोकंप्लीशन हो। इसलिए उन्होंने इन 2 लाइनों का इस्तेमाल किया:

$installer = $this;
/* @var $installer <appropriate class> */

कुछ मॉड्यूल का अपना सेटअप वर्ग होता है और इसका उपयोग इनलाइन phpdoc में किया जाना चाहिए। लेकिन क्योंकि सेटअप / अपग्रेड स्क्रिप्ट थी (और हैं) हमेशा "कॉपी / पेस्ट कुछ मौजूदा एक और परिवर्तन के माध्यम से बनाई गई" आप शायद ऐसे उदाहरण पा सकते हैं जब मॉड्यूल का खुद का सेटअप वर्ग होता है (या ईवी सेटअप मॉडल का उपयोग करता है Mage_Eav_Model_Entity_Setup), लेकिन Mage_Catalog_Model_Resource_Setupउन्नयन में इनलाइन phpdoc का उपयोग किया जाता है स्क्रिप्ट।


8

मेरे पास सबसे पुराना संस्करण 1.0 है। तब भी $installer = $this;अस्तित्व में था। नाम की फाइलों में भीupgrade-0.x.y-0.z.t इस लाइन मौजूद है।

मेरी राय में, जब उन्होंने शुरुआत की थी (मेरा मतलब है संस्करण 0.1 या ऐसा कुछ) उनके पास कुछ ऐसा था $installer = new Something()और उन्होंने तर्क बदलने का फैसला किया।
मैं कुछ मॉड्यूल (उदाहरण के लिए Mage_Catalog) के <class>टैग के कारण इसे मानता हूं config.xml। 1.6 से पहले के संस्करण:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup> 

या संस्करणों में 1.6+:

<setup>
    <module>Mage_Catalog</module>
    <class>Mage_Catalog_Model_Resource_Setup</class>
</setup>

मैं आमतौर पर $thisइसके बजाय का उपयोग करता $installerहूं और मेरे पास कोई मुद्दा नहीं था (यदि वह किसी भी तरह से परिपक्व होता है)।


5

यह 2007 के शुरुआती सार्वजनिक बीटा के बाद से अज्ञात और संभवतः संदिग्ध तर्क का एक सम्मेलन है ( पूर्वावलोकन B1 0.6.12383 ; लॉगिन आवश्यक)।

यह एक कन्वेंशन के रूप में उपयोग किया जाता है ताकि यह सुनिश्चित किया जा सके कि सेटअप कोड को निष्पादित करने वाले वर्ग को सेटअप स्क्रिप्ट में लगातार अलियास किया जाता है। उदाहरण के लिए, जबकि दोनों मॉड्यूल Enterprise_GiftWrappingऔर Enterprise_Rmaमॉड्यूल की अपनी सेटअप कक्षाएं हैं, वे उत्पाद इकाई में विशेषताओं को जोड़ते समय प्रत्येक $installerउदाहरण के लिए उर्फ होते हैं Mage_Catalog_Model_Resource_Setup, जैसे:

एप्लिकेशन / कोड / कोर / उद्यम / GiftWrapping / एसक्यूएल / enterprise_giftwrapping_setup / स्थापित-1.11.0.0.php

<?php

$installer = $this;
/* @var $installer Enterprise_GiftWrapping_Model_Resource_Setup */
//... miscellaneous Enterprise_GiftWrapping setup logic

$installer = Mage::getResourceModel('catalog/setup', 'catalog_setup');
//... miscellaneous product entity attribute manipulation

4

एक चीज $installerजो मुझे उपयोग करने के बारे में पसंद है जो मैं वास्तव में जोड़ना चाहता हूं वह यह है कि इसे किसी और चीज के साथ बदलना या वर्ग के दायरे से बाहर चलाना आसान बनाता है।


1. इसे प्रतिस्थापित करना:

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */
// Do basic stuff

$installer = Mage::getSingleton('eav/entity_setup', 'eav_setup');
/* @var $installer Mage_Eav_Model_Entity_Setup */
/// Do stuff with attributes


2. बाहर का दायरा:

$ php -a
php> requirement_once 'app / Mage.php';
php> दाना :: init ();
php> के लिए 'ऐप / कोड / लोकल / वेंडर / मॉड्यूल / डेटा / वेरगर्मोडुले_सेटअप / डेटा-अपग्रेड-0.1.1-0.1.2.php' की आवश्यकता होती है;
अपग्रेड काम किया!
डीबग डेटा डंप: सरणी (4) {
  'आईडी' =>
  पूर्णांक (123)
  'फू' =>
  स्ट्रिंग (3) "बार"
}

data-upgrade-0.1.1-0.1.2.phpहोने के साथ :

//$installer = $this;
$installer = Mage::getResourceSingleton('core/setup', 'vendormodule_setup');
/* @var $installer Mage_Core_Model_Resource_Setup */

// Do lots of stuff ...

echo "Upgrade worked!\n";
echo "Debug data dump: ";
var_dump($debug);

तो यह रोकता है Fatal error: Using $this when not in object context


$ इंस्टॉलर = दाना :: getSingleton ('eav / unit_setup', 'eav_setup'); याद रखना महत्वपूर्ण है ... आप सिर्फ Mage तक सीमित नहीं हैं :: getResourceModel ('कैटलॉग / सेटअप' ...
CarComp

3

मुझे लगता है कि यह पहले के दिनों से है (<v.1.1)। लेकिन सच कहूं तो मुझे कोई अंदाजा नहीं है। मुझे लगता है कि यह थोड़ा बेहतर पठनीय है ...

हमने हमेशा ऐसा ही किया है

तुम्हे पता हैं ;-)


मुझे नहीं लगता कि यह किसी भी PHP OOP कोड में बहुत मायने रखता है, लेकिन शुरू में इसका इस्तेमाल भी किया। फिर किसी बिंदु पर उस हिस्से को पूरी तरह से नजरअंदाज कर दिया, और कभी कोई मुद्दा नहीं था। इसलिए मेरा अनुभव है कि आप इस कोड को सुरक्षित रूप से अनदेखा कर सकते हैं।
पेटर दज़मबाज़ोव

हाँ, मुझे भी ऐसा लगता है। मैं बस इसके लिए
अभ्यस्त
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.