ইনস্টল স্ক্রিপ্টগুলিতে $ ইনস্টলার ভি of এর ব্যবহার


17

ঠিক আছে, স্ক্রিপ্টগুলি ইনস্টল করার মাধ্যমে নিম্নলিখিতগুলি ব্যবহার করার জন্য একটি অদ্ভুত সম্মেলন বলে মনে হচ্ছে:

$installer = $this;

এটি সম্পূর্ণ অপ্রয়োজনীয় বলে আমি সত্যিই এটি বুঝতে পারি না।

শুধু $this->স্ক্রিপ্ট জুড়ে ব্যবহার করবেন না কেন ?

এই সম্মেলন কেন বিদ্যমান সে সম্পর্কে কোনও ধারণা?


আমি ভিসকোডে বাইরের অবজেক্টের প্রসঙ্গে ব্যবহারের বিষয়ে সতর্কতা পেয়েছি। কোন ধারণা আমি কীভাবে এটি ঠিক করব?
হেনরির বিড়াল

উত্তর:


11

উত্তরটি অনেক সহজ। 2007 সালে কোন এক আইডিই জন্য ইনলাইন phpdoc প্রদান করার অনুমতি দেওয়া (এবং আমি যখন PhpStorm দোলনা শুরু 2009 পর্যন্ত বিশ্বাস) $this। তবে মূল বিকাশকারীরা আইডিইতে স্বতঃপূরণ পেতে চেয়েছিলেন। এজন্য তারা এই 2 টি লাইন ব্যবহার করেছে:

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

কিছু মডিউলগুলির নিজস্ব সেটআপ ক্লাস রয়েছে এবং এটি ইনলাইন phpdoc এ ব্যবহার করা উচিত ছিল। তবে সেটআপ / আপগ্রেড স্ক্রিপ্টটি সর্বদা "বিদ্যমান কিছু অনুলিপি / পেস্ট করুন এবং পরিবর্তনের" মাধ্যমে তৈরি করা হয়েছিল এবং মডিউলের নিজস্ব সেটআপ শ্রেণি রয়েছে (বা ইভা সেটআপ মডেল ব্যবহার করে Mage_Eav_Model_Entity_Setup) তবে Mage_Catalog_Model_Resource_Setupআপগ্রেডে ইনলাইন পিএইচপিডোক ব্যবহার করা হলেও আপনি উদাহরণ খুঁজে পেতে পারেন লিপি.


8

আমার কাছে প্রাচীনতম সংস্করণটি 1.0। তারপরেও $installer = $this;অস্তিত্ব ছিল। এমনকি upgrade-0.x.y-0.z.tএই লাইন নামের ফাইলগুলিতেও বিদ্যমান।

আমার মতে, যখন তারা শুরু হয়েছিল (আমার মানে সংস্করণ 0.1 বা এর মতো কিছু) তাদের কিছু ছিল $installer = new Something()এবং তারা যুক্তি পরিবর্তন করার সিদ্ধান্ত নিয়েছিল।
আমি এটি ধরে নিয়েছি কারণ কিছু মডিউলগুলির <class>ট্যাগ config.xml(উদাহরণস্বরূপ Mage_Glog) Cat 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 সালের প্রথম দিকের সর্বজনীন বিটা ( পূর্ববর্তী বি 1 0.6.12383 ; লগইন প্রয়োজনীয়) থেকে অজানা এবং সম্ভবত সন্দেহজনক যুক্তির একটি সম্মেলন of

সেটআপ কোডটি চালাচ্ছে এমন শ্রেণিটি সেটআপ স্ক্রিপ্টগুলিতে ধারাবাহিকভাবে এলিয়াস হয় কিনা তা নিশ্চিত করার জন্য এটি কনভেনশন হিসাবে ব্যবহৃত হয়। উদাহরণস্বরূপ, উভয় Enterprise_GiftWrappingএবং Enterprise_Rmaমডিউলগুলির নিজস্ব সেটআপ ক্লাস থাকা অবস্থায়, তারা প্রতিটি উপনামকে পণ্য সত্তায় বৈশিষ্ট্য যুক্ত করার $installerক্ষেত্রে একটি উদাহরণে Mage_Catalog_Model_Resource_Setupযুক্ত করে, যেমন:

অ্যাপ্লিকেশন / কোড / কোর / এন্টারপ্রাইজ / GiftWrapping / SQL / enterprise_giftwrapping_setup / install-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> need_once 'app / Mage.php';
php> Mage :: init ();
পিএইচপি> 'অ্যাপ / কোড / স্থানীয় / বিক্রেতা / মডিউল / ডেটা / ভেন্ডারোমডিউল_সেটআপ / ডেটা-আপগ্রেড -১.০.০.০.২.২. পিএইচপি' প্রয়োজন;
আপগ্রেড কাজ!
ডিবাগ ডেটা ডাম্প: অ্যারে (4) {
  'আইডি' =>
  int- এ (123)
  'foo' =>
  স্ট্রিং (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 ('ইভা / সত্তা_সেটআপ', 'ইভা_সেটআপ'); মনে রাখা জরুরী ... আপনি কেবলমাত্র ম্যাজ :: গেট রিসোর্সমোডেল ('ক্যাটালগ / সেটআপ' এ সীমাবদ্ধ নন ...
কারকম্প

3

আমি অনুমান করব এটি আগের দিনগুলি থেকে ছিল (<v.1.1)। তবে সত্যি কথা বলতে আমার কোনও ধারণা নেই। আমি মনে করি এটি কিছুটা ভাল পঠনযোগ্য ...

আমরা সবসময় এটি এভাবেই করেছি

তুমি জান ;-)


আমি মনে করি না যে এটি কোনও পিএইচপি ওওপি কোডে বেশি অর্থবোধ করে, তবে প্রাথমিকভাবে এটি ব্যবহারও হয়েছিল। তারপরে কোনও এককালে সেই অংশটিকে সম্পূর্ণ উপেক্ষা করেছিলেন এবং কখনও কোনও সমস্যা হয়নি। সুতরাং আমার অভিজ্ঞতা হ'ল আপনি নিরাপদে এই কোডটি উপেক্ষা করতে পারেন।
পেটার ঝাজাবাজভ

হ্যাঁ, আমিও তাই মনে করি। আমি কেবল এটির জন্য
অভ্যস্ত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.