পিএইচপি, যেমন আমাদের বেশিরভাগই জানি, টাইপিং দুর্বল । যারা করেন না তাদের জন্য, পিএইচপি.এন.টি বলেছেন:
পিএইচপি-র পরিবর্তনশীল ঘোষণায় সুস্পষ্ট প্রকারের সংজ্ঞা (বা সমর্থন) প্রয়োজন হয় না; একটি ভেরিয়েবলের ধরণটি সেই প্রসঙ্গে নির্ধারণ করা হয় যেখানে ভেরিয়েবলটি ব্যবহৃত হয়।
এটি পছন্দ করুন বা এটি ঘৃণা করুন, পিএইচপি এই ফ্লাইতে চলকগুলি পুনরায় কাস্ট করে। সুতরাং, নিম্নলিখিত কোডটি বৈধ:
$var = "10";
$value = 10 + $var;
var_dump($value); // int(20)
পিএইচপি আপনাকে সুস্পষ্টভাবে একটি ভেরিয়েবল কাস্ট করার অনুমতি দেয়, যেমন:
$var = "10";
$value = 10 + $var;
$value = (string)$value;
var_dump($value); // string(2) "20"
এগুলি সবই দুর্দান্ত ... তবে আমার জীবনের জন্য, আমি এটি করার জন্য ব্যবহারিক কারণটি ধারণ করতে পারি না।
জাভা যেমন এটি সমর্থন করে এমন ভাষাগুলিতে শক্ত টাইপ করার ক্ষেত্রে আমার সমস্যা নেই। এটি ঠিক আছে, এবং আমি এটি পুরোপুরি বুঝতে পারি। এছাড়াও, আমি ফাংশন পরামিতিগুলিতে - টাইপ ইঙ্গিতটির - এবং এর কার্যকারিতা সম্পর্কে পুরোপুরি বুঝতে পারি ।
টাইপ কাস্টিংয়ের সাথে আমার যে সমস্যাটি রয়েছে তা উপরের উদ্ধৃতি দিয়ে ব্যাখ্যা করা হয়েছে। পিএইচপি ধরনের অদলবদল করতে পারেন অ্যাট ইচ্ছা , তাই পরেও আপনি কি করতে পারেন নিক্ষেপ বল একটি টাইপ; এবং যখন আপনাকে কোনও ক্রিয়াকলাপে নির্দিষ্ট ধরণের প্রয়োজন হয় তখন এটি ফ্লাই-অন-ফ্লাই করতে পারে । এটি নিম্নলিখিত বৈধ করে তোলে:
$var = "10";
$value = (int)$var;
$value = $value . ' TaDa!';
var_dump($value); // string(8) "10 TaDa!"
তাহলে কি লাভ?
এই বিশ্বের তাত্ত্বিক উদাহরণটি ধরুন যেখানে ব্যবহারকারী-সংজ্ঞায়িত টাইপ কাস্টিং পিএইচপি-তে উপলব্ধি করে :
- আপনি কাস্ট পরিবর্তনশীল জোর
$foo
যেমনint
→(int)$foo
। - আপনি চলকটিতে একটি স্ট্রিং মান সংরক্ষণ করার চেষ্টা করেন
$foo
। - পিএইচপি একটি ব্যতিক্রম ছোঁড়ে !! ← এটি বোধগম্য হবে। হঠাৎ ব্যবহারকারীর সংজ্ঞায়িত ধরণের ingালাইয়ের কারণ বিদ্যমান!
পিএইচপি প্রয়োজন অনুসারে জিনিসগুলিকে স্যুইচ করবে এটি ব্যবহারকারীর সংজ্ঞায়িত ধরণের castালাই অস্পষ্ট করে তোলে। উদাহরণস্বরূপ, নিম্নলিখিত দুটি কোড নমুনা সমতুল্য:
// example 1
$foo = 0;
$foo = (string)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;
// example 2
$foo = 0;
$foo = (int)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;
মূলত এই প্রশ্নটি করার এক বছর পরে, অনুমান করুন যে নিজেকে ব্যবহারিক পরিবেশে টাইপকাস্টিং ব্যবহার করেছেন? আপনার সত্যই।
প্রয়োজনটি ছিল একটি রেস্তোঁরা মেনুর জন্য কোনও ওয়েবসাইটে অর্থের মান প্রদর্শন করা। সাইটের নকশার জন্য প্রয়োজনীয় অনুসরণযোগ্য শূন্যগুলি ছাঁটাতে হবে, যাতে প্রদর্শনটি নিম্নলিখিতগুলির মতো দেখতে কিছুটা লাগে:
Menu Item 1 .............. $ 4
Menu Item 2 .............. $ 7.5
Menu Item 3 .............. $ 3
ভেরিয়েবলটিকে একটি ভাসমান হিসাবে কাস্ট করার জন্য আমি সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি:
$price = '7.50'; // a string from the database layer.
echo 'Menu Item 2 .............. $ ' . (float)$price;
পিএইচপি ফ্লোটের চলমান শূন্যগুলি ছাঁটাই করে, এবং তারপরে ফ্লোটটিকে সংক্ষিপ্তকরণের স্ট্রিং হিসাবে পুনরুদ্ধার করে।
(string)
কাস্ট করতে চান ?
$intval.'bar'
ব্যতিক্রম ছুঁড়ে মারছে, আমি এখনও তাতে একমত নই। এটি কোনও ভাষায় ব্যতিক্রম ঘটায় না। (আমার জানা সমস্ত ভাষা একটি স্বয়ংক্রিয় কাস্ট বা একটি সম্পাদন করে .toString()
)। যদি আপনি বলছেন যে $intval = $stringval
ব্যতিক্রম ছোঁড়াচ্ছে, তবে আপনি দৃ strongly়ভাবে টাইপ করা ভাষার কথা বলছেন। আমি অসভ্য শব্দ বলতে চাইনি, তাই, দুঃখিত যদি আমি তা করি। আমি কেবলমাত্র মনে করি এটি প্রতিটি বিকাশকারীদের যা ব্যবহৃত হয় তার বিপরীতে যায় এবং এটি অনেক কম সুবিধাজনক।