Php7 - PHP: একটি ফাংশনের ভিতরে গ্লোবাল একটি পরিবর্তনশীল দেখায় না - রাশিয়ান ভাষায় স্ট্যাক ওভারফ্লো। পিএইচপি ভেরিয়েবলের সুযোগ। সবকিছু আপনি জানতে চেয়েছিলেন কিন্তু একটি ফাংশনের বাইরে একটি গ্লোবাল php ভেরিয়েবল প্রিন্ট করতে জিজ্ঞাসা করতে ভয় পান৷

শেষ আপডেট: 11/1/2015

ভেরিয়েবল এবং ফাংশন ব্যবহার করার সময়, পরিবর্তনশীল সুযোগ বিবেচনা করুন। সুযোগ একটি প্রদত্ত ভেরিয়েবলের কর্মের সুযোগ এবং অ্যাক্সেসযোগ্যতা নির্দিষ্ট করে।

স্থানীয় ভেরিয়েবল

একটি ফাংশনের ভিতরে স্থানীয় ভেরিয়েবল তৈরি করা হয়। এই ধরনের ভেরিয়েবল শুধুমাত্র একটি প্রদত্ত ফাংশনের মধ্যে থেকে অ্যাক্সেস করা যেতে পারে। উদাহরণ স্বরূপ:

এই ক্ষেত্রে, get() ফাংশন একটি স্থানীয় পরিবর্তনশীল $result সংজ্ঞায়িত করে। এবং সাধারণ প্রেক্ষাপট থেকে আমরা এটি অ্যাক্সেস করতে পারি না, অর্থাৎ $a = $result লিখুন; এটি সম্ভব নয় কারণ $result ভেরিয়েবলের সুযোগ get() ফাংশন দ্বারা সীমিত। এই ফাংশনের বাইরে $result ভেরিয়েবলের অস্তিত্ব নেই।

একই ফাংশন প্যারামিটারের ক্ষেত্রেও প্রযোজ্য: ফাংশনের বাইরে $lowlimit এবং $highlimit প্যারামিটারগুলিও বিদ্যমান নেই।

একটি নিয়ম হিসাবে, স্থানীয় ভেরিয়েবলগুলি গণনার কিছু মধ্যবর্তী ফলাফল সংরক্ষণ করে, যেমন উপরের উদাহরণে।

স্ট্যাটিক ভেরিয়েবল

স্ট্যাটিক ভেরিয়েবল স্থানীয় ভেরিয়েবলের অনুরূপ। তারা ভিন্ন যে ফাংশন সম্পূর্ণ হওয়ার পরে, তাদের মান সংরক্ষণ করা হয়। প্রতিবার ফাংশনটি কল করা হলে, এটি পূর্বে সংরক্ষিত মান ব্যবহার করে। উদাহরণ স্বরূপ:

একটি ভেরিয়েবল স্ট্যাটিক হবে তা বোঝাতে, এতে স্ট্যাটিক কীওয়ার্ড যোগ করা হয়। getCounter() এ পরপর তিনটি কলের সাথে $counter ভেরিয়েবলটি এক দ্বারা বৃদ্ধি পাবে।

যদি $counter ভেরিয়েবল একটি নিয়মিত নন-স্ট্যাটিক ভেরিয়েবল হয়, তাহলে getCounter() প্রতিবার কল করার সময় 1 প্রিন্ট করবে।

সাধারণত, স্ট্যাটিক ভেরিয়েবলগুলি বিভিন্ন কাউন্টার তৈরি করতে ব্যবহৃত হয়, যেমন উপরের উদাহরণে।

গ্লোবাল ভেরিয়েবল

কখনও কখনও আপনি একটি পরিবর্তনশীল সর্বত্র উপলব্ধ হতে চান, বিশ্বব্যাপী. এই ধরনের ভেরিয়েবল পুরো প্রোগ্রামে সাধারণ কিছু ডেটা সংরক্ষণ করতে পারে। গ্লোবাল ভেরিয়েবল সংজ্ঞায়িত করতে, গ্লোবাল কীওয়ার্ড ব্যবহার করুন:1

";) getGlobal(); echo $gvar; ?>

getGlobal() ফাংশন কল করার পরে, $gvar ভেরিয়েবলটি প্রোগ্রামের যেকোনো অংশ থেকে অ্যাক্সেস করা যেতে পারে।

নোট:সাইটের অভিযোজিত সংস্করণ সক্রিয় করা হয়েছে, যা স্বয়ংক্রিয়ভাবে আপনার ব্রাউজারের ছোট আকারের সাথে খাপ খায় এবং পড়ার সুবিধার জন্য সাইটের কিছু বিবরণ লুকিয়ে রাখে। দর্শন উপভোগ কর!

হ্যালো প্রিয় ব্লগ পাঠকদের সাইটচালু! আমরা শিখেছি যে পিএইচপি-তে একটি ফাংশন আছে, আমরা শিখেছি কীভাবে আমাদের নিজস্ব ফাংশন তৈরি করতে হয়, তাদের কাছে আর্গুমেন্ট পাঠাতে হয় এবং তাদের কার্যকর করার জন্য ডাকতে হয়। পিএইচপি-তে ফাংশনের বিষয়টি অব্যাহত রেখে, নিম্নলিখিত বিষয়গুলিতে জোর দেওয়া প্রয়োজন:

  • ফাংশনের ভিতরে, আপনি যেকোনো PHP কোড ব্যবহার করতে পারেন (চক্র, শর্ত, যেকোনো অপারেশন), অন্যান্য ফাংশন সহ (বিল্ট-ইন এবং কাস্টম উভয়ই);
  • ফাংশনের নামটি অবশ্যই একটি ল্যাটিন অক্ষর বা একটি আন্ডারস্কোর দিয়ে শুরু হতে হবে, তারপরে যেকোন সংখ্যক ল্যাটিন অক্ষর, সংখ্যা বা আন্ডারস্কোর থাকবে;
  • সমস্ত ফাংশনের গ্লোবাল স্কোপ রয়েছে, যার অর্থ হল যে কোনও ফাংশনকে যে কোনও জায়গায় কল করা যেতে পারে, এমনকি যদি সেই ফাংশনটি অন্যটির ভিতরে সংজ্ঞায়িত করা হয়;
  • পিএইচপি ফাংশন ওভারলোডিং সমর্থন করে না; একটি তৈরি ফাংশন পুনরায় সংজ্ঞায়িত (পরিবর্তন, যোগ) বা মুছে ফেলার কোন সম্ভাবনা নেই;
  • ফাংশন ব্যবহার করার আগে সংজ্ঞায়িত করতে হবে না। অর্থাৎ, আপনি যদি প্রথমে একটি ফাংশন কল করেন এবং শুধুমাত্র তারপরে নীচের কোডে এটি বর্ণনা করেন, এটি কর্মক্ষমতাকে প্রভাবিত করবে না এবং ত্রুটি সৃষ্টি করবে না।

শর্তাধীন ফাংশন

আমরা শর্তের উপর নির্ভর করে একটি ফাংশন তৈরি (সংজ্ঞায়িত, বর্ণনা) করতে পারি। উদাহরণ স্বরূপ:

// ফাংশনটিকে sayHi বলে, এটি যে কোনও জায়গায় বলা যেতে পারে /*সেই গুডবাই ফাংশনটি এখানে বলা যাবে না, যেহেতু আমরা এখনও শর্তটি পরীক্ষা করিনি এবং যদি কনস্ট্রাক্টের ভিতরে যাইনি*/ if($apply)( ফাংশন say Goodbye())( echo "বাই সবাই!
"; } } /*এখন আমরা গুডবাই বলতে পারি*/
"; }

ফলাফল:

এবং এই উদাহরণটি একবার দেখুন:

/*এবং আপনি এখানে গুডবাই কল করলে এটিই ঘটবে*/বলে গুডবাই(); if($apply)( ফাংশন say Goodbye())( echo "বাই সবাই!
"; ) ) ফাংশন sayHi())( echo "হ্যালো সবাই!
"; }

ফলাফল:

আসলে, আমি যতটা কাজ করছি, আমি কোথাও এরকম কিছু দেখিনি, তবে আপনাকে ভাষার সমস্ত সম্ভাবনার কথা মাথায় রাখতে হবে।

নেস্টেড ফাংশন

একটি নেস্টেড ফাংশন হল অন্য ফাংশনের ভিতরে ঘোষিত একটি ফাংশন। উদাহরণ:

/*আপনি এখানে গুডবাই কল করতে পারবেন না, যেহেতু এটি শুধুমাত্র sayHi ফাংশন কল করার পরেই উপস্থিত হবে*/হাই বলুন(); /*ফাংশনটিকে হাই বলুন, এটি যে কোনও জায়গায় বলা যেতে পারে*/ /*এখন আমরা গুডবাই বলতে পারি*/বলে গুডবাই(); ফাংশন sayHi())( echo "হ্যালো সবাই!
"; ফাংশন সায় গুডবাই())( ইকো "বাই সবাই!
"; } }

আবার, প্রথম ট্রাভার্সালে, পিএইচপি ইন্টারপ্রেটার নিজেকে চিহ্নিত করে যে সে sayHi ফাংশনের একটি বর্ণনা পেয়েছে, কিন্তু তার শরীরের ভিতরে যায় না, এটি শুধুমাত্র নাম দেখে এবং যেহেতু দোভাষী sayHi এর শরীরের ভিতরে যায় না, তারপরে এটির কোন ধারণা নেই যে আমরা অন্য ফাংশনের ভিতরে কী সংজ্ঞায়িত করছি - গুডবাই।

তারপরে কোডটি কার্যকর করা শুরু হয়, আমরা sayHi বলি, পিএইচপি দোভাষীকে এটি চালানোর জন্য sayHi ফাংশনের বডিতে যেতে হবে এবং সেখানে এটি দুর্ঘটনাক্রমে অন্য একটি ফাংশনের বর্ণনা খুঁজে পায় - sayGoodbye, তারপর যে কোনো জায়গায় sayGoodbye বলা যেতে পারে, যতবার আপনার ইচ্ছা.

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

পিএইচপি-তে, উপরে বর্ণিত কৌশলগুলি খুব কমই ব্যবহৃত হয়; সেগুলি আরও প্রায়ই দেখা যায়, উদাহরণস্বরূপ, জাভাস্ক্রিপ্টে।

পরিবর্তনশীল সুযোগ

পিএইচপিতে ঠিক দুটি সুযোগ রয়েছে: বিশ্বব্যাপীএবং স্থানীয়. প্রতিটি প্রোগ্রামিং ভাষার কাঠামো আলাদাভাবে স্কোপ করে। উদাহরণস্বরূপ, C++ এ, এমনকি লুপের নিজস্ব (স্থানীয়) সুযোগ রয়েছে। পিএইচপি, উপায় দ্বারা, এটি একটি বিশ্বব্যাপী সুযোগ. কিন্তু আজ আমরা ফাংশন সম্পর্কে কথা বলছি।

পিএইচপি-তে ফাংশনগুলির নিজস্ব অভ্যন্তরীণ সুযোগ রয়েছে (স্থানীয়), অর্থাৎ, একটি ফাংশনের ভিতরের সমস্ত ভেরিয়েবল শুধুমাত্র এই ফাংশনের মধ্যেই দৃশ্যমান।

সুতরাং, আবারও: ফাংশনের বাইরের সবকিছুই বিশ্বব্যাপী সুযোগ, ফাংশনের ভিতরের সবকিছুই স্থানীয় সুযোগ। উদাহরণ:

প্রিয় বিশেষজ্ঞ, মনোযোগ, প্রশ্ন! শেষ নির্দেশ আউটপুট কি হবে? প্রতিধ্বনি $name; ?

আপনি নিজের জন্য দেখেছেন, আমরা 2 ভেরিয়েবল ছিল $নাম, একটি ফাংশনের ভিতরে (স্থানীয় সুযোগ), অন্যটি শুধু কোডে (গ্লোবাল স্কোপ), একটি ভেরিয়েবলের শেষ অ্যাসাইনমেন্ট $নামছিল $name = "Rud Sergey";কিন্তু যেহেতু এটি ফাংশনের ভিতরে ছিল তাই সেখানেই থেকে গেল। বৈশ্বিক পরিধিতে, শেষ অ্যাসাইনমেন্ট ছিল $name = "Andrey";যা আমরা আসলে ফলাফল হিসাবে দেখতে কি.

অর্থাৎ, দুটি অভিন্ন ভেরিয়েবল, কিন্তু বিভিন্ন স্কোপে তারা ছেদ করে না এবং একে অপরকে প্রভাবিত করে না।

আমাকে চিত্রে সুযোগ চিত্রিত করা যাক:

প্রথম ট্রাভার্সালের সময়, ইন্টারপ্রেটার সংক্ষিপ্তভাবে গ্লোবাল স্কোপ স্ক্যান করে, সেখানে কী ভেরিয়েবল এবং ফাংশন আছে তা মনে রাখে, কিন্তু কোডটি এক্সিকিউট করে না।

স্থানীয় সুযোগ থেকে বিশ্বব্যাপী ভেরিয়েবল অ্যাক্সেস করা

কিন্তু যদি আমরা এখনও একই $name ভেরিয়েবল অ্যাক্সেস করার প্রয়োজন একটি ফাংশন থেকে গ্লোবাল স্কোপ থেকে, এবং শুধুমাত্র এটি অ্যাক্সেস না, কিন্তু এটি পরিবর্তন? এর জন্য 3টি প্রধান বিকল্প রয়েছে। প্রথমটি কীওয়ার্ড ব্যবহার করছে বিশ্বব্যাপী:

"; বিশ্বব্যাপী $নাম; /*এখন থেকে আমরা গ্লোবাল ভেরিয়েবল মানে $name*/$name = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); প্রতিধ্বনি $name; //?

ফলাফল:

কিন্তু এই পদ্ধতির একটি অসুবিধা আছে, যেহেতু আমরা গ্লোবাল ভেরিয়েবল অ্যাক্সেস করেছি $নামআমরা একটি স্থানীয় ভেরিয়েবল হারিয়েছি (ওভাররাইট) $নাম.

দ্বিতীয় উপায়ব্যবহার করা হয় পিএইচপি সুপার গ্লোবাল অ্যারে. পিএইচপি নিজেই স্বয়ংক্রিয়ভাবে এই অ্যারেতে গ্লোবাল স্কোপে তৈরি করা প্রতিটি ভেরিয়েবলকে রাখে। উদাহরণ:

$name = "Andrey"; //একই রকম$GLOBALS["name"] = "Andrey";

তাই:

"; $GLOBALS["name"] = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); echo $name; // ?

ফলাফল কীওয়ার্ড ব্যবহার করার মতই বিশ্বব্যাপী:

শুধুমাত্র এইবার আমরা লোকাল ভেরিয়েবল, অর্থাৎ ভেরিয়েবলটি আবার লিখিনি $নামভিতরে ফাংশন একই থাকে এবং সমান "আন্দ্রে", কিন্তু না "রুড সের্গেই".

রেফারেন্স দ্বারা আর্গুমেন্ট পাস

তৃতীয় উপায়- এটি ঠিকানা স্থানান্তর ( লিঙ্ক) একটি পরিবর্তনশীল, এর মান নয়। পিএইচপি-তে লিঙ্কগুলি অন্যান্য প্রোগ্রামিং ভাষার বিপরীতে খুব সফল নয়। যাইহোক, আমি আপনাকে একটি ফাংশনের রেফারেন্স দ্বারা একটি আর্গুমেন্ট পাস করার একমাত্র সঠিক বিকল্পটি বলব, যা সাধারণত PHP 5.3 এবং উচ্চতর সমর্থিত। লিঙ্কগুলির সাথে কাজ করার অন্যান্য উপায় রয়েছে, তবে তারা পিএইচপি 5.2 এবং তার নীচে কাজ করেছে, ফলস্বরূপ, পিএইচপি বিকাশকারীরা নিজেরাই সেগুলি পরিত্যাগ করার সিদ্ধান্ত নিয়েছে, তাই আমরা সেগুলি সম্পর্কে কথা বলব না।

সুতরাং, পিএইচপি 5.3 এবং উচ্চতর রেফারেন্স দ্বারা একটি যুক্তির সঠিক পাসিং নিম্নরূপ করা হয়:

ফাংশন sayHi(& $name)(

ফাংশনের বর্ণনাতেই, আমরা একটি অ্যাম্পারস্যান্ড আইকন (&) যোগ করেছি - এই আইকনের অর্থ হল আমরা ভেরিয়েবলের মান গ্রহণ করি না, তবে মেমরিতে এই মানের একটি লিঙ্ক (ঠিকানা)। পিএইচপি-তে রেফারেন্স আপনাকে একই মান নির্দেশ করে দুটি ভেরিয়েবল তৈরি করতে দেয়। এর মানে হল যে যখন এই ভেরিয়েবলগুলির একটি পরিবর্তিত হয়, উভয়ই পরিবর্তিত হয়, যেহেতু তারা মেমরিতে একই মান উল্লেখ করে।

এবং শেষ পর্যন্ত আমাদের আছে:

// একটি মান গ্রহণ না, কিন্তু মান একটি রেফারেন্সপ্রতিধ্বনি "হ্যালো, ".$ নাম।"!
"; $name = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); echo $name; // ?

ফলাফল:

স্ট্যাটিক ভেরিয়েবল

নিম্নলিখিত পরিস্থিতি কল্পনা করুন: আমরা মোট কতবার হ্যালো বলেছি তা আমাদের গণনা করতে হবে। আমরা যা করার চেষ্টা করছি তা এখানে:

"; $c++; // কাউন্টার 1 দ্বারা বাড়ান


ফলাফল:

পরিবর্তনশীল $cএর অর্থ মনে রাখে না, এটি প্রতিবার নতুন করে তৈরি হয়। আমাদের স্থানীয় পরিবর্তনশীল করতে হবে $cফাংশন চালানোর পরে এর মান মনে রাখে, এর জন্য তারা একটি কীওয়ার্ড ব্যবহার করে স্থির:

// কাউন্টার, স্ট্যাটিক তৈরিপ্রতিধ্বনি "হ্যালো, ".$ নাম।"!
"; $c++; // কাউন্টার 1 দ্বারা বাড়ানপ্রতিধ্বনি "শুধু হ্যালো বলেছেন"। $c " একদা.


"; ) বলে হি("রুড সের্গেই"); বলে হি("অ্যান্ড্রে"); বলে হি("দিমিত্রি");

ফলাফল:

রিটার্নিং মান

ফাংশন মান ফেরত হিসাবে যেমন একটি সুবিধাজনক জিনিস আছে. এটি হল যখন একটি ফাংশন, স্ক্রিনে কিছু প্রিন্ট করার পরিবর্তে, সবকিছুকে একটি ভেরিয়েবলের মধ্যে রাখে এবং সেই পরিবর্তনশীলটি আমাদের দেয়। এবং আমরা ইতিমধ্যে এটির সাথে কী করতে হবে তা নির্ধারণ করছি। উদাহরণস্বরূপ, এই ফাংশনটি ধরা যাক, এটি একটি সংখ্যাকে বর্গ করে:

ফলাফল:

আসুন এটি তৈরি করি যাতে এটি স্ক্রিনে প্রদর্শনের পরিবর্তে এটি কার্যকর করার ফলাফল প্রদান করে। এটি করতে, রিটার্ন কীওয়ার্ড ব্যবহার করুন:

ফলাফল:

এখন আমরা এটি বিভিন্ন উপায়ে ব্যবহার করতে পারি:

// ফলাফল আউটপুটপ্রতিধ্বনি "
"; $num = getSquare(5); echo $num;

ফলাফল:

অনুগ্রহ করে লক্ষ্য করুন যে কীওয়ার্ড ফিরেশুধুমাত্র একটি মান ফেরত দেয় না, তবে ফাংশনটিকে সম্পূর্ণরূপে বাধা দেয়, অর্থাৎ, কীওয়ার্ডের নীচে থাকা সমস্ত কোড ফিরেকখনো পূরণ হবে না। অন্য কথায়, ফাংশন জন্য রিটার্ন এছাড়াও মত কাজ করে বিরতিলুপের জন্য:

প্রতিধ্বনি "PHP আমার কাছে কখনই পৌঁছাবে না:(";) echo getSquare(5); // ফলাফল আউটপুটপ্রতিধ্বনি "
"; $num = getSquare(5); // একটি পরিবর্তনশীল ফলাফল বরাদ্দপ্রতিধ্বনি $num; // পর্দায় ভেরিয়েবল প্রদর্শন করুন

ফলাফল:

এটাই ফিরে- এটিও ফাংশন থেকে প্রস্থান। এটি একটি রিটার্ন মান ছাড়াই ব্যবহার করা যেতে পারে, শুধুমাত্র আউটপুটের জন্য।

পুনরাবৃত্ত ফাংশন

একটি পুনরাবৃত্ত ফাংশন একটি ফাংশন যা নিজেকে কল করে। পুনরাবৃত্তি প্রায়ই ব্যবহৃত হয় না এবং এটি একটি সম্পদ-নিবিড় (ধীর) অপারেশন হিসাবে বিবেচিত হয়। কিন্তু এটি ঘটে যে পুনরাবৃত্তি ব্যবহার করা সবচেয়ে সুস্পষ্ট এবং সহজ বিকল্প। উদাহরণ:

"; যদি ($ সংখ্যা< 20){ // যাতে পুনরাবৃত্তি অন্তহীন না হয়গণনা করুন (++$ সংখ্যা); // countPlease ফাংশন নিজেই বলা হয়) ) গণনা করুন(1);

ফলাফল:

আপনি যদি পুনরাবৃত্তি ছাড়া কিভাবে করতে জানেন, তাহলে এটি করা ভাল।

PHP-তে শক্তিশালী টাইপিং (টাইপ পরিমার্জন)

পিএইচপি শক্তিশালী টাইপিংয়ের দিকে ছোট পদক্ষেপ নেয়, তাই আমরা আগে থেকেই নির্দিষ্ট করতে পারি কোন ফাংশনটি কী ধরনের গ্রহণ করা উচিত (এটিকে বলা হয় টাইপ-ইঙ্গিত):

ফলাফল:

ক্যাচেবল মারাত্মক ত্রুটি: কাউন্ট প্লিজ() এ পাস করা আর্গুমেন্ট 1 অবশ্যই একটি অ্যারে হতে হবে, দেওয়া পূর্ণসংখ্যা, লাইন 7-এ /home/index.php-এ বলা হয় এবং লাইন 3-এ /home/index.php-এ সংজ্ঞায়িত করা হয়েছে

ত্রুটি আমাদের বলে যে ফাংশন একটি অ্যারে পাওয়ার আশা করে, কিন্তু পরিবর্তে আমরা এটি একটি সংখ্যা পাস করছি। দুর্ভাগ্যবশত, আপাতত আমরা শুধুমাত্র (অ্যারে) এর ধরণটি নির্দিষ্ট করতে পারি এবং পিএইচপি 5.4 এর সাথে আমরা এমন একটি বিকল্প যোগ করেছি কলযোগ্য:

কলযোগ্যপাস করা মানটিকে ফাংশন হিসাবে বলা যেতে পারে কিনা তা পরীক্ষা করে। কলযোগ্য একটি স্ট্রিং ভেরিয়েবল দ্বারা নির্দিষ্ট করা একটি ফাংশনের নাম, অথবা একটি বস্তু এবং কল করা পদ্ধতির নাম হতে পারে। কিন্তু আমরা অবজেক্ট এবং পদ্ধতি সম্পর্কে পরে কথা বলব (এটি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি বিভাগ), তবে আপনি ইতিমধ্যে ফাংশনগুলির সাথে পরিচিত। আমি আপনাকে কাজের ফলাফল দেখাতে পারছি না, যেহেতু আমার কাছে বর্তমানে পিএইচপি 5.3 আছে, তবে এটি হবে:

getEcho ফাংশন বলা হয়

পরিবর্তনশীল দৈর্ঘ্য আর্গুমেন্ট ব্যবহার করে

এবং পরিশেষে, আরেকটি খুব কমই ব্যবহৃত nuance. একটি পরিস্থিতি কল্পনা করুন: আমরা একটি ফাংশনে আর্গুমেন্ট পাস করি, যদিও আমরা সেগুলিকে ফাংশনে বর্ণনা করিনি, উদাহরণস্বরূপ:

ফলাফল:

আপনি দেখতে পাচ্ছেন, কোনও ত্রুটি নেই, তবে আমাদের পাস করা আর্গুমেন্টগুলি কোথাও ব্যবহার করা হয় না। তবে এর অর্থ এই নয় যে তারা চলে গেছে - তারা এখনও ফাংশনে পাস করা হয়েছিল এবং আমরা সেগুলি ব্যবহার করতে পারি; এর জন্য অন্তর্নির্মিত পিএইচপি ফাংশন রয়েছে:

func_num_args()- ফাংশনে পাস করা আর্গুমেন্টের সংখ্যা প্রদান করে
func_get_arg(ক্রম সংখ্যা)- আর্গুমেন্টের তালিকা থেকে একটি উপাদান প্রদান করে
func_get_args()- ফাংশন আর্গুমেন্ট ধারণকারী একটি অ্যারে প্রদান করে

"; echo func_get_arg(0) ; ) $age = 22; getEcho("Rud Sergey", $age);

ফলাফল:

উপসংহার

আজকের নিবন্ধটি পিএইচপি-তে ফাংশনের বিষয়ে চূড়ান্ত। এখন আপনি এই বিষয়ে আপনার জ্ঞানের সম্পূর্ণতায় আত্মবিশ্বাসী হতে পারেন এবং আত্মবিশ্বাসের সাথে আপনার প্রয়োজনের জন্য ফাংশনগুলি ব্যবহার করতে পারেন।

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

আপনার মনোযোগের জন্য আপনাকে ধন্যবাদ এবং আবার দেখা হবে! যদি কিছু পরিষ্কার না হয়, মন্তব্যে আপনার প্রশ্ন জিজ্ঞাসা করুন!

এই টিউটোরিয়ালটি পিএইচপি ভেরিয়েবলের সুযোগ কভার করে। স্থানীয় এবং বিশ্বব্যাপী সুযোগের মধ্যে পার্থক্য ব্যাখ্যা করে, দেখায় কিভাবে একটি ফাংশনের মধ্যে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা যায়, কিভাবে সুপারগ্লোবালের সাথে কাজ করা যায় এবং স্ট্যাটিক ভেরিয়েবল তৈরি করা যায়।

আপনি যখন পিএইচপি শেখা শুরু করেন এবং ফাংশন এবং অবজেক্টের সাথে কাজ শুরু করেন, তখন পরিবর্তনশীল সুযোগ কিছুটা বিভ্রান্তিকর। সৌভাগ্যবশত, এই বিষয়ে পিএইচপি-এর নিয়মগুলি বোঝা খুব সহজ (অন্যান্য প্রোগ্রামিং ভাষার তুলনায়)।

সুযোগ কি?

ভেরিয়েবলের সুযোগ হল সেই প্রেক্ষাপট যার মধ্যে ভেরিয়েবলকে সংজ্ঞায়িত করা হয়েছিল এবং যেখানে এটি অ্যাক্সেস করা যেতে পারে। PHP এর দুটি পরিবর্তনশীল স্কোপ রয়েছে:

  • গ্লোবাল- ভেরিয়েবলগুলি স্ক্রিপ্টের যে কোনও জায়গায় অ্যাক্সেস করা যেতে পারে
  • স্থানীয়- ভেরিয়েবলগুলি শুধুমাত্র সেই ফাংশনের ভিতরে অ্যাক্সেস করা যেতে পারে যেখানে তারা সংজ্ঞায়িত করা হয়েছিল

একটি ভেরিয়েবলের সুযোগ, এবং বিশেষ করে স্থানীয় একটি, কোড পরিচালনাকে ব্যাপকভাবে সরল করে। যদি সমস্ত ভেরিয়েবল বিশ্বব্যাপী হয়, তবে সেগুলি স্ক্রিপ্টের যে কোনও জায়গায় পরিবর্তন করা যেতে পারে। এটি বিশৃঙ্খলা এবং বড় স্ক্রিপ্টের দিকে পরিচালিত করবে, যেহেতু প্রায়শই স্ক্রিপ্টের বিভিন্ন অংশ একই নামের সাথে ভেরিয়েবল ব্যবহার করে। স্থানীয় প্রেক্ষাপটে সুযোগ সীমিত করে, আপনি কোডের সীমানা নির্ধারণ করেন যা একটি ভেরিয়েবল অ্যাক্সেস করতে পারে, যা কোডটিকে আরও শক্তিশালী, মডুলার এবং ডিবাগ করা সহজ করে তোলে।

গ্লোবাল স্কোপ সহ ভেরিয়েবলগুলিকে গ্লোবাল বলা হয় এবং স্থানীয় স্কোপ সহ ভেরিয়েবলগুলিকে স্থানীয় বলা হয়।

এখানে গ্লোবাল এবং স্থানীয় ভেরিয়েবল কিভাবে কাজ করে তার একটি উদাহরণ।

"; ) sayHello(); echo "\$globalName এর মান: "$globalName"
"; echo "\$localName মান: "$localName"
"; ?>

হাই হ্যারি! $globalName মান: "Zoe" $localName মান: ""

এই স্ক্রিপ্টে আমরা দুটি ভেরিয়েবল তৈরি করেছি:

  • $globalName- এই বিশ্বব্যাপীপরিবর্তনশীল
  • $localName- এই স্থানীয়একটি ভেরিয়েবল যা sayHello() ফাংশনের ভিতরে তৈরি করা হয়।

ভেরিয়েবল এবং ফাংশন তৈরি করার পরে, স্ক্রিপ্ট কল করে sayHello(), যা প্রিন্ট করে "হ্যালো হ্যারি!" . তারপর স্ক্রিপ্ট ইকো ফাংশন ব্যবহার করে দুটি ভেরিয়েবলের মান আউটপুট করার চেষ্টা করে। এখানে যা ঘটে:

  • কারণ $globalNameফাংশনের বাইরে তৈরি করা হয়েছিল, এটি স্ক্রিপ্টের যেকোনো জায়গায় পাওয়া যায়, তাই "Zoe" হল আউটপুট।
  • $localNameশুধুমাত্র sayHello() ফাংশনের ভিতরে উপলব্ধ হবে। যেহেতু ইকো এক্সপ্রেশন ফাংশনের বাইরে, তাই পিএইচপি স্থানীয় ভেরিয়েবলে অ্যাক্সেস প্রদান করে না। পরিবর্তে, PHP আশা করে যে কোডটি $localName নামে একটি নতুন ভেরিয়েবল তৈরি করবে, যার একটি ডিফল্ট মান থাকবে খালি স্ট্রিং। এই কারণেই ইকো করার দ্বিতীয় কলটি $localName ভেরিয়েবলের জন্য "" মান বের করে।

একটি ফাংশনের ভিতরে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা

একটি গ্লোবাল ভেরিয়েবল অ্যাক্সেস করতে ফাংশনের বাইরেশুধু তার নাম লেখাই যথেষ্ট। কিন্তু একটি বিশ্বব্যাপী পরিবর্তনশীল অ্যাক্সেস করতে একটি ফাংশনের ভিতরে, আপনাকে প্রথমে গ্লোবাল কীওয়ার্ড ব্যবহার করে ফাংশনে ভেরিয়েবলটিকে গ্লোবাল হিসাবে ঘোষণা করতে হবে:

ফাংশন myFunction() ( গ্লোবাল $globalVariable; // গ্লোবাল ভেরিয়েবল $globalVariable অ্যাক্সেস করুন)

আপনি যদি এটি না করেন, পিএইচপি ধরে নেয় যে আপনি একটি স্থানীয় ভেরিয়েবল তৈরি বা ব্যবহার করছেন।

এখানে একটি উদাহরণ স্ক্রিপ্ট যা একটি ফাংশনের ভিতরে একটি গ্লোবাল ভেরিয়েবল ব্যবহার করে:

"; বিশ্বব্যাপী $globalName; প্রতিধ্বনি "হ্যালো $globalName!
";) বলে হ্যালো(); ?>

কার্যকর করা হলে, স্ক্রিপ্টটি আউটপুট করবে:

হাই হ্যারি! হ্যালো জোয়া!

sayHello() ফাংশন গ্লোবাল কীওয়ার্ড ব্যবহার করে $globalName ভেরিয়েবলকে বিশ্বব্যাপী ঘোষণা করে। সে তখন ভেরিয়েবল অ্যাক্সেস করতে পারে এবং এর মান (“Zoe”) আউটপুট করতে পারে।

সুপারগ্লোবাল কি?

পিএইচপি-তে পূর্বনির্ধারিত গ্লোবাল অ্যারেগুলির একটি বিশেষ সেট রয়েছে যা বিভিন্ন তথ্য ধারণ করে। এই ধরনের অ্যারে বলা হয় সুপারগ্লোবাল,যেহেতু অভ্যন্তরীণ ফাংশন স্পেস সহ স্ক্রিপ্টের যেকোনো স্থান থেকে এগুলি অ্যাক্সেসযোগ্য, এবং গ্লোবাল কীওয়ার্ড ব্যবহার করে সংজ্ঞায়িত করার প্রয়োজন নেই।

এখানে PHP সংস্করণ 5.3 এ উপলব্ধ সুপারগ্লোবালগুলির একটি তালিকা রয়েছে:

  • $GLOBALS - স্ক্রিপ্টে সমস্ত গ্লোবাল ভেরিয়েবলের তালিকা (সুপারগ্লোবাল ব্যতীত)
  • $_GET - একটি GET অনুরোধ ব্যবহার করে ব্রাউজার দ্বারা জমা দেওয়া সমস্ত ফর্ম ক্ষেত্রের একটি তালিকা রয়েছে৷
  • $_POST - একটি পোস্ট অনুরোধ ব্যবহার করে ব্রাউজার দ্বারা পাঠানো সমস্ত ফর্ম ক্ষেত্রের একটি তালিকা রয়েছে৷
  • $_COOKIE - ব্রাউজার দ্বারা পাঠানো সমস্ত কুকির একটি তালিকা রয়েছে৷
  • $_REQUEST - $_GET, $_POST, $_COOKIE অ্যারেতে থাকা সমস্ত কী/মান সমন্বয় রয়েছে
  • $_FILES - ব্রাউজার দ্বারা ডাউনলোড করা সমস্ত ফাইলের একটি তালিকা রয়েছে৷
  • $_SESSION - আপনাকে বর্তমান ব্রাউজারের জন্য সেশন ভেরিয়েবল সংরক্ষণ এবং ব্যবহার করতে দেয়
  • $_SERVER - সার্ভার সম্পর্কে তথ্য রয়েছে, যেমন স্ক্রিপ্টের ফাইলের নাম এবং ব্রাউজারের IP ঠিকানা।
  • $_ENV - পিএইচপি-তে পাস করা পরিবেশ ভেরিয়েবলের একটি তালিকা রয়েছে, যেমন CGI ভেরিয়েবল।
উদাহরণস্বরূপ, আপনি একটি স্ক্রিপ্টের অনুরোধ URL স্ট্রিং-এ আবদ্ধ ভেরিয়েবলের মান পেতে $_GET ব্যবহার করতে পারেন এবং সেগুলিকে পৃষ্ঠায় প্রদর্শন করতে পারেন:

আপনি যদি http://www.example.com/script.php?yourName=Fred URL ব্যবহার করে উপরের স্ক্রিপ্টটি চালান, তাহলে এটি আউটপুট করবে:

হ্যালো ফ্রেড!

সতর্কতা !একটি বাস্তব স্ক্রিপ্টে, দুর্বল নিরাপত্তার কারণে এই ধরনের ডেটা স্থানান্তর কখনই ব্যবহার করা উচিত নয়। আপনার সর্বদা তথ্য যাচাই বা ফিল্টার করা উচিত।

সুপারগ্লোবাল $GLOBALS ব্যবহার করা খুবই সুবিধাজনক কারণ এটি আপনাকে গ্লোবাল কীওয়ার্ডের প্রয়োজন ছাড়াই একটি ফাংশনে গ্লোবাল ভেরিয়েবলে অ্যাক্সেস সংগঠিত করতে দেয়। উদাহরণ স্বরূপ:

"; ) বলে হ্যালো(); // প্রিন্ট করে "হ্যালো, জোয়া!" ?>

স্ট্যাটিক ভেরিয়েবল: তারা কোথাও কাছাকাছি আছে

আপনি যখন একটি ফাংশনের ভিতরে একটি স্থানীয় ভেরিয়েবল তৈরি করেন, তখন এটি শুধুমাত্র ফাংশনটি চলাকালীন বিদ্যমান থাকে। ফাংশন সম্পূর্ণ হলে, স্থানীয় পরিবর্তনশীল অদৃশ্য হয়ে যায়। যখন ফাংশনটি আবার কল করা হয়, একটি নতুন স্থানীয় ভেরিয়েবল তৈরি করা হয়।

বেশিরভাগ ক্ষেত্রে এটি দুর্দান্ত কাজ করে। এইভাবে, ফাংশনগুলি স্বয়ংসম্পূর্ণ এবং প্রতিবার কল করা হলে সর্বদা একই কাজ করে।

যাইহোক, এমন পরিস্থিতি রয়েছে যেখানে একটি স্থানীয় ভেরিয়েবল তৈরি করা সুবিধাজনক হবে যা ফাংশন কলগুলির মধ্যে এর মান "মনে রাখে"। এই ধরনের পরিবর্তনশীলকে স্ট্যাটিক বলা হয়।

একটি ফাংশনে একটি স্ট্যাটিক ভেরিয়েবল তৈরি করতে, আপনাকে অবশ্যই ভেরিয়েবলের নামের আগে স্ট্যাটিক কীওয়ার্ড ব্যবহার করতে হবে এবং এটি একটি প্রাথমিক মান দিতে ভুলবেন না। উদাহরণ স্বরূপ:

ফাংশন myFunction() ( static $myVariable = 0; )

চলুন একটি পরিস্থিতি বিবেচনা করা যাক যখন এটি একটি স্ট্যাটিক ভেরিয়েবল ব্যবহার করা সুবিধাজনক। ধরা যাক আপনি এমন একটি ফাংশন তৈরি করেছেন যেটিকে ডাকা হলে একটি উইজেট তৈরি করে এবং ইতিমধ্যে তৈরি করা উইজেটের সংখ্যা প্রদর্শন করে। আপনি একটি স্থানীয় পরিবর্তনশীল ব্যবহার করে এই মত কোড লেখার চেষ্টা করতে পারেন:


"; echo createWidget()।" আমরা ইতিমধ্যে তৈরি করেছি।
"; echo createWidget()।" আমরা ইতিমধ্যে তৈরি করেছি।>
"; ?>

কিন্তু, যেহেতু প্রতিবার ফাংশনটি কল করার সময় $numWidgets ভেরিয়েবল তৈরি করা হয়, আমরা নিম্নলিখিত ফলাফল পাব:

আমরা কিছু উইজেট তৈরি করি... আমরা ইতিমধ্যেই 1 তৈরি করেছি। আমরা ইতিমধ্যে 1 তৈরি করেছি। আমরা ইতিমধ্যে 1 তৈরি করেছি।

কিন্তু একটি স্ট্যাটিক ভেরিয়েবল ব্যবহার করে, আমরা একটি ফাংশন কল থেকে অন্য ফাংশনে মান সংরক্ষণ করতে পারি:

"; echo createWidget()।" আমরা ইতিমধ্যে তৈরি করেছি।
"; echo createWidget()।" আমরা ইতিমধ্যে তৈরি করেছি।
"; echo createWidget()।" >আমরা ইতিমধ্যেই তৈরি করেছি।
"; ?>

এখন স্ক্রিপ্টটি প্রত্যাশিত ফলাফল তৈরি করবে:

আমরা কিছু উইজেট তৈরি করি... আমরা ইতিমধ্যেই 1 তৈরি করেছি। আমরা ইতিমধ্যে 2 তৈরি করেছি। আমরা ইতিমধ্যে 3 তৈরি করেছি।

যদিও একটি স্ট্যাটিক ভেরিয়েবল ফাংশন কলের মধ্যে তার মান ধরে রাখে, স্ক্রিপ্টটি চলমান থাকাকালীন এটি শুধুমাত্র বৈধ। একবার স্ক্রিপ্টটি কার্যকর করা শেষ হলে, সমস্ত স্ট্যাটিক ভেরিয়েবল ধ্বংস হয়ে যায়, যেমন স্থানীয় এবং বিশ্বব্যাপী ভেরিয়েবল।

এখানেই শেষ! অনুগ্রহ করে ঘন ঘন আপনার পিএইচপি ডকুমেন্টেশন পড়ুন।

এখানে লক্ষণীয় বিষয় হল আপনার উপস্থাপন করা কোড উপাদান হিসাবে বিবেচনা করা উচিত খারাপ ডিজাইন এবং প্রোগ্রামিং শৈলী, কারণ এটি অন্তর্ভুক্ত ফাইলটিকে তাত্ক্ষণিকভাবে এক্সিকিউটেবল অপারেশনের সেট হিসাবে বিবেচনা করে।

সবচেয়ে সঠিক পদ্ধতিটি হ'ল একটি ফাইলে তাদের নিজস্ব নাম সহ ফাংশন/ক্লাস হিসাবে ক্রিয়াকলাপগুলির সেট রাখা, ফাইলটি অন্তর্ভুক্ত করা (ফাংশনের বাইরে কোনও রিটার্ন স্টেটমেন্ট ছাড়াই), এবং তারপরে ফাংশনটিকে কল করা। স্পষ্টতইআর্গুমেন্টের প্রয়োজনীয় সেট সহ।

তো সমস্যাটা কী?

সবকিছু অত্যন্ত সহজ, আপনি এটা করেন অন্তর্ভুক্তএকটি পদ্ধতির ভিতরে পদ্ধতি, যার মানে অন্তর্ভুক্ত ফাইলে নির্দিষ্ট ভেরিয়েবলগুলি পদ্ধতির সুযোগে আরম্ভ করা হয় পদ্ধতি. অতএব, পরিবর্তনশীল $langবিশ্বব্যাপী নয় এবং পদ্ধতির দৃশ্যমানতা দ্বারা সীমাবদ্ধ, এবং আপনি একটি গ্লোবাল ভেরিয়েবল অ্যাক্সেস করছেন, তাই মডিফায়ার ব্যবহার করার সময় বিশ্বব্যাপীএটা নাল সমান হবে.

আপনি যদি গ্লোবাল স্কোপের মধ্যে অন্তর্ভুক্ত করেন, তাহলে ল্যাং ভেরিয়েবলটি সর্বজনীন (গ্লোবাল) হয়ে যাবে এবং এর ব্যবহার সম্ভব হবে। এটি পরীক্ষা করা সহজ; অন্তর্ভুক্ত ফাইলে, কোনো পরিবর্তনশীল সংজ্ঞায়িত করা শুরু করার আগে, শুধু লিখুন বিশ্বব্যাপী $ পরিবর্তনশীল।

উদাহরণ:

অন্তর্ভুক্ত করুন "file1.php"; ফাংশন অন্তর্ভুক্ত 2() ( "file2.php" অন্তর্ভুক্ত করে;)
  • file1.php গ্লোবাল স্কোপে সংজ্ঞায়িত করা হয়।
  • file2.php অন্তর্ভুক্ত2 ফাংশনের স্থানীয় সুযোগে সংজ্ঞায়িত করা হয়েছে।

গ্লোবাল ভেরিয়েবলের সাথে পন্থা এবং এই ধরনের অন্তর্ভুক্ত একটি ক্রাচ যা আপনাকে ভবিষ্যতে সমস্যা নিয়ে আসবে। ফাংশনগুলিকে অবশ্যই স্পষ্টভাবে সংজ্ঞায়িত করতে হবে, একটি অনন্য নাম থাকতে হবে এবং চাহিদা অনুযায়ী কার্যকর করা হবে।

কেন বিশ্বব্যাপী ভেরিয়েবলের সাথে পদ্ধতি খারাপ?

বিন্দু হল যে বিশ্বব্যাপী ভেরিয়েবলগুলি সর্বত্র, বিশ্বব্যাপী দৃশ্যমান। এটি সুবিধাজনক: কোন সীমাবদ্ধতা নেই। অন্যদিকে, কে ডেটা পরিবর্তন করেছে তা ট্র্যাক করা সম্পূর্ণরূপে অসম্ভব হয়ে পড়ে। অনিয়ন্ত্রিত পরিবর্তনগুলি হল প্রথম জিনিস যা সাধারণত মনে আসে যখন জিজ্ঞাসা করা হয় কেন বিশ্বব্যাপী ভেরিয়েবলগুলি খারাপ।

ধরা যাক আপনার একটি ফাংশন আছে যার ফলাফল একটি গ্লোবাল ভেরিয়েবলের উপর নির্ভর করে। আপনি এটি কল করুন, এটি কল করুন, কিন্তু 10 মিনিটের পরে ফাংশনটি ভুল ফলাফল দিতে শুরু করে। কি হয়ছে? সব পরে, আপনি ইনপুট হিসাবে এটি পরামিতি একই সেট পাস করছেন? হুম, কেউ একটি গ্লোবাল ভেরিয়েবলের মান পরিবর্তন করেছে... কে হতে পারে? হ্যাঁ, যে কেউ - সর্বোপরি, একটি গ্লোবাল ভেরিয়েবল সবার জন্য উপলব্ধ।

সাবরুটিন ডিজাইন করার জন্য সেরা রেসিপি হল: আপনার ফাংশনের ফলাফল শুধুমাত্র আর্গুমেন্টের উপর নির্ভর করে. এই জন্য সংগ্রাম একটি আদর্শ.

অপ্রয়োজনীয়ভাবে আপনার প্রকল্পে গ্লোবাল ভেরিয়েবল ব্যবহার করবেন না, স্থানীয় সুযোগের সমস্ত বৈশিষ্ট্যের সুবিধা নিন, ফাংশন আর্গুমেন্টে পরামিতি পাস করুন এবং কোড লেখা, বজায় রাখা এবং পরীক্ষা করা সহজ হবে।

আপনি কি জানেন গ্লোবাল ভেরিয়েবলের জন্য সেরা উপসর্গ কি?

একটি সাবরুটিনের মধ্যে সংজ্ঞায়িত ভেরিয়েবল (ব্যবহারকারী-সংজ্ঞায়িত ফাংশন)। এগুলি কেবলমাত্র সেই ফাংশনের মধ্যে অ্যাক্সেসযোগ্য যেখানে তারা সংজ্ঞায়িত করা হয়েছে৷

PHP-এর জন্য, ফাংশনে ঘোষিত এবং ব্যবহৃত সমস্ত ভেরিয়েবল ডিফল্টভাবে ফাংশনের স্থানীয়। অর্থাৎ, ডিফল্টভাবে একটি ফাংশনের বডিতে গ্লোবাল ভেরিয়েবলের মান পরিবর্তন করা সম্ভব নয়।

যদি একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের মূল অংশে আপনি একটি বৈশ্বিক ভেরিয়েবলের নামের সাথে অভিন্ন একটি ভেরিয়েবল ব্যবহার করেন (ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের বাইরে অবস্থিত), তাহলে এই স্থানীয় ভেরিয়েবলটির গ্লোবাল ভেরিয়েবলের সাথে কোনো সম্পর্ক থাকবে না। এই পরিস্থিতিতে, ইউজার-ডিফাইনড ফাংশনে গ্লোবাল ভেরিয়েবলের নামের অনুরূপ একটি স্থানীয় ভেরিয়েবল তৈরি করা হবে, তবে এই স্থানীয় ভেরিয়েবলটি শুধুমাত্র এই ব্যবহারকারী-সংজ্ঞায়িত ফাংশনের মধ্যেই পাওয়া যাবে।

আসুন একটি নির্দিষ্ট উদাহরণ দিয়ে এই সত্যটি ব্যাখ্যা করি:

$a = 100 ;

ফাংশন ফাংশন() (
$a = 70;
প্রতিধ্বনি "

$a

" ;
}
ফাংশন();
প্রতিধ্বনি "

$a

" ;
?>

স্ক্রিপ্টটি প্রথমে 70 এবং তারপর 100 মুদ্রণ করবে:

70
100

এই অপূর্ণতা পরিত্রাণ পেতে, পিএইচপি একটি বিশেষ নির্দেশ আছে বিশ্বব্যাপী, একটি ব্যবহারকারী-সংজ্ঞায়িত ফাংশনকে গ্লোবাল ভেরিয়েবলের সাথে কাজ করার অনুমতি দেয়। আসুন নির্দিষ্ট উদাহরণ ব্যবহার করে এই নীতিটি দেখি:

$a = 1;
$b = 2;

ফাংশনের যোগফল()
{
বিশ্বব্যাপী $a, $b;

$b = $a + $b ;
}

যোগফল();
প্রতিধ্বনি $b;
?>

উপরের স্ক্রিপ্ট আউটপুট হবে " 3 "। সংজ্ঞায়িত করার পর $aএবং $bযেমন ফাংশন ভিতরে বিশ্বব্যাপীএই ভেরিয়েবলের যেকোনও রেফারেন্স তাদের গ্লোবাল সংস্করণের দিকে নির্দেশ করবে। বিশ্বব্যাপী ভেরিয়েবলের সংখ্যার কোন সীমা নেই যা ব্যবহারকারী-সংজ্ঞায়িত ফাংশন দ্বারা পরিচালনা করা যেতে পারে।

গ্লোবাল স্কোপ ভেরিয়েবল অ্যাক্সেস করার দ্বিতীয় উপায় হল একটি বিশেষ পিএইচপি-সংজ্ঞায়িত অ্যারে ব্যবহার করা $GLOBALS. পূর্ববর্তী উদাহরণ এই মত পুনর্লিখন করা যেতে পারে:

গ্লোবাল এর পরিবর্তে $GLOBALS ব্যবহার করা:

$a = 1;
$b = 2;

ফাংশনের যোগফল()
{
$GLOBALS [ "b" ] = $GLOBALS [ "a" ] + $GLOBALS [ "b" ];
}

যোগফল();
প্রতিধ্বনি $b;
?>

$GLOBALSএকটি সহযোগী অ্যারে যার কী হল নাম এবং যার মান হল গ্লোবাল ভেরিয়েবলের বিষয়বস্তু। উল্লেখ্য যে $GLOBALS যেকোন স্কোপে বিদ্যমান, কারণ এটি একটি অ্যারে। নীচে সুপারগ্লোবালগুলির ক্ষমতা প্রদর্শনের একটি উদাহরণ রয়েছে:

ফাংশন test_global()
{
// বেশিরভাগ পূর্বনির্ধারিত ভেরিয়েবল নয়
// "সুপার" এবং স্থানীয় এলাকায় উপলব্ধ
// ফাংশন দৃশ্যমানতার জন্য "গ্লোবাল" নির্দিষ্ট করা প্রয়োজন।
বিশ্বব্যাপী $HTTP_POST_VARS ;

প্রতিধ্বনি $HTTP_POST_VARS["নাম"];

// সুপারগ্লোবাল যেকোন সুযোগে পাওয়া যায়
// দৃশ্যমানতা এবং "গ্লোবাল" নির্দিষ্ট করার প্রয়োজন নেই।
// PHP 4.1.0 থেকে সুপারগ্লোবাল উপলব্ধ
প্রতিধ্বনি $_POST ["নাম" ];
}
?>