আমি মনে করি না কেউ এই প্রশ্নের যথেষ্ট উত্তর দিয়েছে। তিনি জিজ্ঞাসা করেননি যে সেগুলি ক্রমে স্ট্রিং প্রতিধ্বনি করতে পারে কিনা। বরং প্রশ্নের লেখক জানতে চান যে তিনি ফাংশন পয়েন্টার আচরণ অনুকরণ করতে পারেন কিনা।
এখানে বেশ কয়েকটি উত্তর রয়েছে যা আমি যা করছিলাম তার মতো এবং আমি এটি অন্য একটি উদাহরণ দিয়ে প্রসারিত করতে চাই।
লেখকের কাছ থেকে:
function x() {
echo "Hello world"
}
function around() {
echo "before"
($1) <------ Only change
echo "after"
}
around x
এটি প্রসারিত করতে, ফাংশন বাস্তবায়ন কখন ঘটে থাকে তা দেখানোর জন্য আমাদের ফাংশন এক্স ইকো "হ্যালো ওয়ার্ল্ড: $ 1" থাকবে। আমরা একটি স্ট্রিং পাস করব যা "x" ফাংশনের নাম:
function x() {
echo "Hello world:$1"
}
function around() {
echo "before"
($1 HERE) <------ Only change
echo "after"
}
around x
এটি বর্ণনার জন্য, "x" স্ট্রিংটি () এর চারপাশে ফাংশনটিতে প্রেরণ করা হয় যা "এর আগে" থাকে, ফাংশনটিকে x (ভ্যারিয়েবল $ 1 এর মাধ্যমে বলে, প্রথম প্যারামিটারটি চারপাশে চলে গেছে) "HERE" আর্গুমেন্টটি পাস করে শেষ পর্যন্ত ইকোস করে ।
অন্য একদিকে যেমন ফাংশনের নাম হিসাবে ভেরিয়েবল ব্যবহার করার পদ্ধতি এটি। ভেরিয়েবলগুলি প্রকৃতপক্ষে স্ট্রিংটি ধারণ করে যা ফাংশনের নাম এবং ($ ভেরিয়েবল আরগ 1 আরজি 2 ...) আর্গুমেন্টগুলি অতিক্রম করে ফাংশনটিকে কল করে। নিচে দেখ:
function x(){
echo $3 $1 $2 <== just rearrange the order of passed params
}
Z="x"
($Z 10 20 30)
দেয়: 30 10 20, যেখানে আমরা ভেরিয়েবল জেডে "x" নামক ফাংশনটি কার্যকর করি এবং 10 20 এবং 30 প্যারামিটারগুলি পাস করেছি।
উপরে যেখানে আমরা ফাংশনগুলিতে ভেরিয়েবল নাম নির্ধারণ করে ফাংশনগুলি উল্লেখ করি যাতে আমরা ফাংশনটির নামটি জানার পরিবর্তে চলকটি ব্যবহার করতে পারি (যা প্রোগ্রামের প্রবাহকে সাধারণীকরণের জন্য সিতে খুব ক্লাসিক ফাংশন পয়েন্টার অবস্থায় আপনি যা করতে পারেন তার অনুরূপ তবে পূর্বের - কমান্ড লাইন আর্গুমেন্টের উপর ভিত্তি করে ফাংশন কলগুলি নির্বাচন করা)।
ব্যাশে এগুলি ফাংশন পয়েন্টার নয়, তবে ভেরিয়েবলগুলি যা আপনার পরে ব্যবহার করা ফাংশনগুলির নাম উল্লেখ করে।