গ্লোবালগুলি অনিবার্য।
এটি একটি পুরানো আলোচনা, তবে আমি এখনও কিছু চিন্তা যুক্ত করতে চাই কারণ আমি উপরে বর্ণিত উত্তরে তাদের মিস করছি। এই উত্তরগুলি বিশ্বব্যাপী কী কী সরল করে তোলে এবং বর্তমান সমাধানগুলি যা সমস্যার কোনও সমাধান নয়। সমস্যাটি হ'ল: বৈশ্বিক চলক এবং কীওয়ার্ড গ্লোবাল ব্যবহারের সাথে মোকাবিলা করার উপযুক্ত উপায় কী? তার জন্য আমাদের প্রথমে বিশ্বব্যাপী কী তা যাচাই করে বর্ণনা করতে হবে।
জেন্ডের এই কোডটি একবার দেখুন - এবং দয়া করে বুঝতে পারেন যে আমি জেন্ডকে খারাপভাবে লেখা হয়েছে বলে প্রস্তাব করি না:
class DecoratorPluginManager extends AbstractPluginManager
{
/**
* Default set of decorators
*
* @var array
*/
protected $invokableClasses = array(
'htmlcloud' => 'Zend\Tag\Cloud\Decorator\HtmlCloud',
'htmltag' => 'Zend\Tag\Cloud\Decorator\HtmlTag',
'tag' => 'Zend\Tag\Cloud\Decorator\HtmlTag',
);
এখানে অনেকগুলি অদৃশ্য নির্ভরতা রয়েছে। এই ধ্রুবকগুলি আসলে ক্লাস। আপনি এই কাঠামোর কয়েকটি পৃষ্ঠায় প্রয়োজনীয়_অনসেসও দেখতে পারেন। প্রয়োজনীয়তা_অনসেস একটি বিশ্ব নির্ভরতা, সুতরাং বাহ্যিক নির্ভরতা তৈরি করে। এটি একটি কাঠামোর জন্য অনিবার্য। বহিরাগত কোডের উপর নির্ভর করে আপনি কীভাবে ডেকোরেটর প্লাগইনম্যানেজারের মতো শ্রেণি তৈরি করতে পারেন? এটি অতিরিক্ত অতিরিক্ত ছাড়া কাজ করতে পারে না। জেন্ডার কাঠামো ব্যবহার করে আপনি কি কখনও কোনও ইন্টারফেসের প্রয়োগ পরিবর্তন করেছেন? একটি ইন্টারফেস আসলে গ্লোবাল।
বিশ্বব্যাপী ব্যবহৃত আর একটি অ্যাপ্লিকেশন হ'ল দ্রুপাল। তারা যথাযথ নকশা সম্পর্কে খুব উদ্বিগ্ন, তবে যে কোনও বড় কাঠামোর মতো, তাদের প্রচুর বাহ্যিক নির্ভরতা রয়েছে। এই পৃষ্ঠায় গ্লোবালগুলি দেখুন:
/**
* @file
* Initiates a browser-based installation of Drupal.
*/
/**
* Root directory of Drupal installation.
*/
define('DRUPAL_ROOT', getcwd());
/**
* Global flag to indicate that site is in installation mode.
*/
define('MAINTENANCE_MODE', 'install');
// Exit early if running an incompatible PHP version to avoid fatal errors.
if (version_compare(PHP_VERSION, '5.2.4') < 0) {
print 'Your PHP installation is too old. Drupal requires at least PHP 5.2.4. See the <a href="http://drupal.org/requirements">system requirements</a> page for more information.';
exit;
}
// Start the installer.
require_once DRUPAL_ROOT . '/includes/install.core.inc';
install_drupal();
কখনও লগইন পৃষ্ঠায় একটি পুনর্নির্দেশ লিখেছেন? এটি একটি বিশ্বব্যাপী মান পরিবর্তন করছে। (এবং তারপরে আপনি কি 'ডব্লিউটিএফ' বলছেন না, যা আমি আপনার অ্যাপ্লিকেশনটির খারাপ ডকুমেন্টেশনের পক্ষে ভাল প্রতিক্রিয়া হিসাবে বিবেচনা করি)) গ্লোবালগুলির সমস্যা এটি নয় যে তারা গ্লোবাল, অর্থপূর্ণ প্রয়োগের জন্য আপনার এগুলি প্রয়োজন। সমস্যাটি হ'ল সামগ্রিক প্রয়োগের জটিলতা যা এটি পরিচালনা করতে একটি দুঃস্বপ্ন করতে পারে। অধিবেশনগুলি বিশ্বব্যাপী, _P _POST একটি বিশ্বব্যাপী, DRUPAL_ROOT একটি বিশ্বব্যাপী, অন্তর্ভুক্ত / install.core.inc 'একটি অপরিবর্তনীয় গ্লোবাল। যে ফাংশনটি তার কাজটি চালাতে দেয় সে জন্য প্রয়োজনীয় যে কোনও ফাংশনের বাইরেও বড় বিশ্ব রয়েছে।
গর্ডনের উত্তরটি ভুল, কারণ তিনি কোনও ফাংশনের স্বাধীনতার উপর নজর রেখেছেন এবং কোনও ফাংশনকে মিথ্যাবাদী বলা পরিস্থিতিটিকে প্রশংসনীয় করে তোলেন। ফাংশনগুলি মিথ্যা বলে না এবং আপনি যখন তার উদাহরণটি একবার দেখুন তখন ফাংশনটি ভুলভাবে ডিজাইন করা হয়েছে - তার উদাহরণটি একটি বাগ is (যাইহোক, আমি এই উপসংহারের সাথে একমত হই যে কোডটি ডিকোপল করা উচিত)) প্রতারণার উত্তর সত্যই পরিস্থিতিটির যথাযথ সংজ্ঞা নয়। ফাংশন সর্বদা একটি বিস্তৃত সুযোগের মধ্যে কাজ করে এবং তার উদাহরণটি খুব সরল istic আমরা সকলেই তাঁর সাথে একমত হব যে সেই ফাংশনটি সম্পূর্ণ অকেজো, কারণ এটি একটি ধ্রুবককে ফিরিয়ে দেয়। এই ফাংশনটি যাইহোক খারাপ নকশা। আপনি যদি অনুশীলনটি খারাপ তা দেখাতে চান তবে দয়া করে একটি প্রাসঙ্গিক উদাহরণ নিয়ে আসুন। কোনও অ্যাপ্লিকেশন জুড়ে ভেরিয়েবলগুলির নাম পরিবর্তন করা ভাল আইডিই (বা কোনও সরঞ্জাম) থাকার কোনও বড় বিষয় নয়। প্রশ্নটি ভেরিয়েবলের স্কোপ সম্পর্কে, ফাংশনের সাথে স্কোপের পার্থক্য নয়। প্রক্রিয়াটিতে কোনও কার্য সম্পাদনের জন্য উপযুক্ত সময় রয়েছে (এজন্য এটি প্রথম স্থানে তৈরি করা হয়েছিল) এবং সঠিক সময়ে এটি প্রয়োগের কার্যকারিতা পুরোপুরি প্রভাবিত করতে পারে, তাই বৈশ্বিক চলকগুলিতেও কাজ করে । এক্সজিফারের উত্তরটি তর্ক ছাড়াই একটি বিবৃতি। গ্লোবালগুলি কোনও অ্যাপ্লিকেশনটিতে ঠিক তেমন উপস্থিত থাকে যদি আপনার পদ্ধতিগত ফাংশন বা ওওপি নকশা থাকে। গ্লোবালের মান পরিবর্তনের পরবর্তী দুটি উপায় মূলত: তাই বৈশ্বিক চলকগুলিতেও কাজ করে working এক্সজিফারের উত্তরটি তর্ক ছাড়াই একটি বিবৃতি। গ্লোবালগুলি কোনও অ্যাপ্লিকেশনটিতে ঠিক তেমন উপস্থিত থাকে যদি আপনার পদ্ধতিগত ফাংশন বা ওওপি নকশা থাকে। গ্লোবালের মান পরিবর্তনের পরবর্তী দুটি উপায় মূলত: তাই বৈশ্বিক চলকগুলিতেও কাজ করে working এক্সজিফারের উত্তরটি তর্ক ছাড়াই একটি বিবৃতি। গ্লোবালগুলি কোনও অ্যাপ্লিকেশনটিতে ঠিক তেমন উপস্থিত থাকে যদি আপনার পদ্ধতিগত ফাংশন বা ওওপি নকশা থাকে। গ্লোবালের মান পরিবর্তনের পরবর্তী দুটি উপায় মূলত:
function xzy($var){
global $z;
$z = $var;
}
function setZ($var){
$this->z = $var;
}
উভয় দৃষ্টিতে একটি নির্দিষ্ট ফাংশনের মধ্যে $ z এর মান পরিবর্তিত হয়। প্রোগ্রামিংয়ের উভয় উপায়ে আপনি কোডগুলিতে অন্যান্য জায়গাগুলির একগুচ্ছ পরিবর্তন করতে পারেন। আপনি বলতে পারেন যে গ্লোবাল ব্যবহার করে আপনি যেকোন জায়গায় $ z কল করতে এবং সেখানে পরিবর্তন করতে পারেন। হ্যা, তুমি পারো. তবে কি করবে? এবং যখন ইনপুট জায়গায় করা হয়, তখন এটি কি বাগ বলা উচিত নয়?
জিজিফার সম্পর্কে বব ফ্যাঙ্গার মন্তব্য করেছেন।
তারপরে কি কেবল কিছু এবং বিশেষত 'গ্লোবাল' শব্দটি ব্যবহার করা উচিত? না, তবে ঠিক কোনও ধরণের ডিজাইনের মতো এটি কী নির্ভর করে এবং এর উপর কী নির্ভর করে তা বিশ্লেষণ করার চেষ্টা করুন। এটি কখন পরিবর্তন হয় এবং কীভাবে পরিবর্তিত হয় তা জানার চেষ্টা করুন। বিশ্বব্যাপী মান পরিবর্তন করা কেবল সেই অনুরূপ পরিবর্তনশীলগুলির সাথেই হওয়া উচিত যা প্রতিটি অনুরোধ / প্রতিক্রিয়াতে পরিবর্তন করতে পারে। এটি কেবলমাত্র সেই ভেরিয়েবলগুলির সাথে যা কোনও প্রক্রিয়াটির কার্যক্ষম প্রবাহের সাথে সম্পর্কিত, এটির প্রযুক্তিগত বাস্তবায়নের সাথে নয়। লগইন পৃষ্ঠায় ইউআরএলকে পুনঃনির্দেশিত করা কোনও প্রক্রিয়াটির ক্রিয়ামূলক প্রবাহের সাথে সম্পর্কিত, প্রযুক্তিগত বাস্তবায়নের জন্য একটি ইন্টারফেসের জন্য ব্যবহৃত বাস্তবায়ন শ্রেণীর। আপনি অ্যাপ্লিকেশনটির বিভিন্ন সংস্করণ চলাকালীন সময়ে পরিবর্তন করতে পারেন, তবে প্রতিটি অনুরোধ / প্রতিক্রিয়াযুক্ত পরিবর্তন করা উচিত নয়।
গ্লোবাল এবং কীওয়ার্ড গ্লোবাল এবং কখন কী ওয়ার্ডের সাথে কাজ করার সমস্যা আছে তা আরও বুঝতে এবং পরের বাক্যটি কখন প্রবর্তন করব না, যা ব্লগ সম্পর্কে লেখার সময় উইম ডি বিয়ের কাছ থেকে আসে: 'ব্যক্তিগত হ্যাঁ, ব্যক্তিগত নম্বর নয়'। যখন কোনও ফাংশন তার নিজস্ব ক্রিয়াকলাপের জন্য কোনও গ্লোবাল ভেরিয়েবলের মান পরিবর্তন করে, তখন আমি সেই বিশ্বব্যাপী ভেরিয়েবল এবং বাগের ব্যক্তিগত ব্যবহারটিকে কল করব। লগইন পৃষ্ঠায় ব্যবহারকারীর পুনঃনির্দেশের মতো সামগ্রিকভাবে অ্যাপ্লিকেশনটির যথাযথ প্রক্রিয়াকরণের জন্য যখন গ্লোবাল ভেরিয়েবলের পরিবর্তন করা হয়, তখন আমার মতামতটি সম্ভবত ভাল ডিজাইন, সংজ্ঞা দ্বারা খারাপ নয় এবং অবশ্যই একটি নয় বিরোধী প্যাটার্ন।
গর্ডনের উত্তরগুলির প্রত্যাবর্তনের ক্ষেত্রে, জালিয়াতি এবং জিজিফার: তাদের সবার উদাহরণ হিসাবে ব্যক্তিগত 'হ্যাঁ' (এবং বাগ) রয়েছে। যে কারণে তারা গ্লোবাল ব্যবহারের বিরোধী are আমিও করতাম তারা অবশ্য 'ব্যক্তিগত হ্যাঁ, প্রাইভেট ন'-এর উদাহরণগুলি নিয়ে আসে না যেমন আমি বেশ কয়েকবার এই উত্তরে করেছি।