মাত্র দুটি যুক্তি দিয়ে পিএইচপি এর টেরিনারি অপারেটর ব্যবহার করে


9

আমি সম্প্রতি আমার কিছু কোড পর্যালোচনা করে লক্ষ্য করেছি যে অনুপস্থিত-মানসিকতার উপযুক্ততায় আমি নিম্নলিখিতগুলির মতো একটি কাঠামো রেখেছি:

$guid = empty($subscription->guid) ?  : $subscription->guid;

এখন, এটি যা করা উচিত ছিল এবং ভুল তা করছিল না , তবে যেহেতু সম্পত্তিটি সর্বদা সেট করা থাকে এটি এখন ঠিকঠাক কাজ করছে, এবং নিম্নলিখিত পরিবর্তনের কারণে 5.3 এর পরে কোনও সিনট্যাক্স ত্রুটি নেই :

পিএইচপি 5.3 থেকে, টার্নারি অপারেটরের মাঝের অংশটি ছেড়ে দেওয়া সম্ভব। এক্সপ্রেশন এক্সপ্রেস 1?: এক্সপ্রেস 3 এক্সপ্রেস 1 প্রদান করে যদি এক্সপ্রেস 1 সত্যের সাথে মূল্যায়ন করে, এবং অন্যথায় এক্সপ্রেস 3 দেয়।

আমি এই পরিবর্তন সম্পর্কে সচেতন ছিলাম না, এবং এখন যদি আমি এটি ব্যবহার করা উচিত বা না করা উচিত তখন আমি আগ্রহী। এটি এমন কিছু যা আমি রুবির মতো ভাষা থেকে খুব অনুপস্থিত ছিল যেখানে আপনি যেমন করতে পারেন, কোনও 'আসল' বুলিয়ান a = b || cপেতে bবা cনা পেয়ে । যাইহোক, তারা টেরিনারি অপারেটরের জন্য সিনট্যাক্সটি বেছে নিয়েছে তা আমার কাছে কিছুটা স্বজ্ঞাত মনে হচ্ছে। আমি কি উত্পাদন কোড এ ব্যবহার করা উচিত? আমি যখন দুর্ঘটনাক্রমে দেখেছিলাম তখন এটি অবশ্যই নিজেকে ছুঁড়ে ফেলেছিল।


আপনার সেই ভারসোল্প টেকফ্লার্ট
অঙ্কুর কুমার সিং

উত্তর:


7

দ্বিতীয় যুক্তি ছাড়া তিন শর্তসাপেক্ষ অপারেটর একটু উপন্যাস, কিন্তু এটা অনুরূপ 1 থেকে নাল-কোয়ালেসিং অপারেটর মত অন্যান্য কম্পিউটারে কাজ করার একটি ভাষা-অমৌলিক ভাষায় পাওয়া সি # এবং পার্ল, এবং আপনি উল্লেখ হিসাবে, ||রুবি (এবং জাভাস্ক্রিপ্ট) এ অপারেটর।

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

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

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


দ্রষ্টব্য 1 : তবে অভিন্ন নয়, প্রদত্ত নাল-কোলেসিং অপারেটরগুলি কেবল নন-নাল মানগুলিতে পরীক্ষা করে (এবং পিএইচপি এর মতো সত্যবাদী মান নয়), এবং ?:সিনট্যাক্স অপরিজ্ঞাত বিজ্ঞপ্তিগুলি দমন করে না যেমন আপনি মন্তব্যে উল্লেখ করেছেন


এই মুহুর্তে, আমার 'দল' খাঁটিভাবে আমাকে নিয়ে গঠিত। হোস্টিং কোনও সমস্যা নয় কারণ আমরা সাধারণত আমাদের নির্মিত সাইটগুলির 98% হোস্ট করি এবং আমরা 5.3.6 এর উপরে হোস্ট করি। আমি বুঝতে পারি যে কার্যকারিতা নিজেই এতটা অস্বাভাবিক নয়, কেবল এটির বাক্য গঠন যা আমার প্রশ্নের মূল the এটি আরও আছে যেখানে এটি আরও সিনট্যাক্স ছাড়াই নাল-কোলেসিং অপারেটরের মতো কাজ করে না ( @অপরিজ্ঞাত জিনিসগুলি সম্পর্কে বিজ্ঞপ্তিগুলি গোপন করার জন্য)।
ম্যাথু শার্লে

3
@ ম্যাথুশার্লি যদি নামস্পেসের ডিলিমিটার (deb) হতাশার কোনও ইঙ্গিত থাকে তবে অদ্ভুত বাক্য গঠনটি পিএইচপি-তে ব্যাপকভাবে গ্রহণের ক্ষেত্রে বাধা নয়। এটি কখনই নেমে আসে, কখন না, আপনার এটি ব্যবহার করা উচিত।

3

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


প্রদত্ত উদাহরণটি ভুল । উদ্দেশ্য হিসাবে কার্যকারিতা একটি সঠিক ব্যবহার হতে হবে $foo = @$bar ?: 'baz'যা সমান $foo = (@$bar ? $bar : 'baz')। যদিও আমি আপনার মন্তব্যের সাথে একমত নই।
ম্যাথু শার্লে

1

ওয়েল, পিএইচপি একটি বুলিয়ান টাইপ এবং ||অপারেটর পিএইচপি এর ফলে boolen ফেরৎ, তাই এর $a || $bএকটি বুলিয়ান, এই সঙ্গে সামঞ্জস্যপূর্ণ &&সঙ্গে &&এক বা অন্যান্য ফিরতে এটা সামান্য জ্ঞান করে তোলে কিন্তু ফিরতি জ্ঞান করে তোলে true/ false। সমস্ত বুলিয়ান অপারেটরদের বিলগুলি ফিরিয়ে নেওয়াও বেশ যুক্তিসঙ্গত শোনায়।

অতিরিক্তভাবে এটি পিএইচপি থেকে কোনও উদ্ভাবন নয় তবে সি অনুসরণ করছে, যেখানে "ক্লাসিক" পিএইচপি এর অনেকগুলি ডিজাইনের উপাদান আসছে। সি 99 স্ট্যান্ডার্ডের .56.5.14 থেকে উদ্ধৃতি:

দি || অপারেটর এর 1 টির সাথে অপরটি তুলনামূলকভাবে 0 টির তুলনা করে; অন্যথায়, এটি ০ দেয় The

এবং, ভাল, আপনার কোনটি ব্যবহার করা উচিত?: বা সাধারণ ফর্মের উত্তর দেওয়া যায় না, তবে মন: ভাষা দেওয়ার সর্বোত্তম উপায়টি এটি সরবরাহ করে এমন কনস্ট্রাক্টগুলি ব্যবহার করা এবং এটির প্রস্তাবিত দৃষ্টান্তগুলি ব্যবহার করা। জাভা কোড যেমন সি কোড, বা অন্য উপায়ে ;-) লেখার তেমন জ্ঞান নেই is


0

আমি মনে করি এটি একটি খুব দরকারী অপারেটর এবং অবশ্যই ভাষা ব্যবহার করা উচিত, যেহেতু ভাষা স্ট্যান্ডার্ড এটি স্পষ্টভাবে ব্যাখ্যা করে।

নোট করুন যে এটি আনুষ্ঠানিকভাবে গ্রুয়েতে এলভিস অপারেটর নামে পরিচিত (কেন? কেবল এটি ঘনিষ্ঠভাবে দেখুন!) এবং জাভা in-এ প্রবর্তনের প্রস্তাব দেওয়া হয়েছিল।

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