অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজে কোয়েলেসেস ফাংশন থাকে (প্রথম নন-নুল মান, উদাহরণ প্রদান করে )। পিএইচপি, দুঃখজনকভাবে 2009 সালে, না।
পিএইচপি নিজেই একটি coalesce ফাংশন না পাওয়া পর্যন্ত পিএইচপি মধ্যে একটি বাস্তবায়ন করার ভাল উপায় কি হবে?
অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজে কোয়েলেসেস ফাংশন থাকে (প্রথম নন-নুল মান, উদাহরণ প্রদান করে )। পিএইচপি, দুঃখজনকভাবে 2009 সালে, না।
পিএইচপি নিজেই একটি coalesce ফাংশন না পাওয়া পর্যন্ত পিএইচপি মধ্যে একটি বাস্তবায়ন করার ভাল উপায় কি হবে?
উত্তর:
পিএইচপি 5.3 এ একটি নতুন অপারেটর রয়েছে যা এটি করে: ?:
// A
echo 'A' ?: 'B';
// B
echo '' ?: 'B';
// B
echo false ?: 'B';
// B
echo null ?: 'B';
$input['properties']['range_low'] ?: '?'
array() ?: null ?: falseফিরিয়ে দেয় , ফেরত দেয় false। অপারেটর সত্যই বুদ্ধিমান।
পিএইচপি 7 একটি বাস্তব coalesce অপারেটর প্রবর্তিত :
echo $_GET['doesNotExist'] ?? 'fallback'; // prints 'fallback'
মানটি যদি ??বিদ্যমান না থাকে বা নেওয়া nullহওয়ার পরে মান ??হয়।
উল্লিখিত ?:অপারেটরের উপর উন্নতি হ'ল ??এটি একটি নিক্ষেপ ছাড়াই অপরিজ্ঞাত ভেরিয়েবলগুলি পরিচালনা করে E_NOTICE।
($_GET['doesNotExist'] ?? null) ?: 'fallback'
?:ওভারের সুবিধাটি ??হ'ল এটি খালি মানগুলিকেও coalesces যা ??না করে। জাভাস্ক্রিপ্টে লজিক্যাল ওআর অপারেটরের আচরণের মতো (অর্থাত্ $val || 'default'), আমি যদি অনুশীলন করে চূড়ান্তভাবে নিজেকে একইভাবে খালি এবং নাল উভয়ভাবে পরিচালনা করি তবে (যেমন ) কোলেসিংয়ের?: আরও ব্যবহারিক রূপ বলে মনে করব । এবং যদি আপনি বিষয়টি আরও জোর করে চাপতে চান এবং গিলে ফেলতে চান তবে আপনি এটির পক্ষেও তর্ক করতে পারেন:$val ?: 'default'E_NOTICEecho @$val ?: 'default';
গুগলে "পিএইচপি কোলেসেস" এর জন্য প্রথম হিট।
function coalesce() {
$args = func_get_args();
foreach ($args as $arg) {
if (!empty($arg)) {
return $arg;
}
}
return NULL;
}
আমি সত্যিই পছন্দ?: অপারেটর। দুর্ভাগ্যক্রমে, এটি এখনও আমার উত্পাদন পরিবেশে প্রয়োগ করা হয়নি। সুতরাং আমি এর সমতুল্য ব্যবহার:
function coalesce() {
return array_shift(array_filter(func_get_args()));
}
coalesceপ্রথম নন-নাল যুক্তিটি প্রত্যাখ্যান করা উচিত , যার মধ্যে এটি অন্তর্ভুক্ত থাকবে FALSE। এই ফাংশনটি FALSEযদিও অপসারণ করবে সম্ভবত অপের মনে যা আছে তা নয় (কমপক্ষে আমি কোনও coalesceফাংশন থেকে যা চাই তা চাই না )।
এটি লক্ষণীয় যে পিএইচপি'র অবিচ্ছিন্ন ভেরিয়েবল এবং অ্যারে সূচকগুলির চিকিত্সার কারণে, কোনও ধরণের কোলেসেস ফাংশন সীমিত ব্যবহারের। আমি এটি করতে সক্ষম হতে চাই:
$id = coalesce($_GET['id'], $_SESSION['id'], null);
তবে এটি, বেশিরভাগ ক্ষেত্রেই, পিএইচপি একটি E_NOTICE এর সাথে ত্রুটি ঘটায়। কোনও ভেরিয়েবল ব্যবহারের আগে এটির অস্তিত্ব পরীক্ষা করার একমাত্র নিরাপদ উপায় হ'ল সরাসরি খালি () বা আইসেট () এ ব্যবহার করা। কেভিন দ্বারা প্রস্তাবিত ত্রৈমাসিক অপারেটর হ'ল সর্বোত্তম বিকল্প যদি আপনি জানেন যে আপনার কোলেসিসের সমস্ত বিকল্প সূচনা করার জন্য পরিচিত।
$getstuff = $_GET+$_SESSION+array('id'=>null);$id=$getstuff['id'];)।
??সাথে পরিচয় করিয়ে দিয়েছে ।
নিশ্চিত হয়ে নিন যে আপনি নির্দিষ্ট ধরণের সাথে কীভাবে এই ফাংশনটি কাজ করতে চান তা আপনি সঠিকভাবে সনাক্ত করেছেন। পিএইচপি-তে বিভিন্ন ধরণের টাইপ-চেকিং বা অনুরূপ ফাংশন রয়েছে, সুতরাং তারা কীভাবে কাজ করে তা আপনি জানেন তা নিশ্চিত করুন। এটি is_null () এবং খালি () এর একটি তুলনা
$testData = array(
'FALSE' => FALSE
,'0' => 0
,'"0"' => "0"
,'NULL' => NULL
,'array()'=> array()
,'new stdClass()' => new stdClass()
,'$undef' => $undef
);
foreach ( $testData as $key => $var )
{
echo "$key " . (( empty( $var ) ) ? 'is' : 'is not') . " empty<br>";
echo "$key " . (( is_null( $var ) ) ? 'is' : 'is not') . " null<br>";
echo '<hr>';
}
যেমন আপনি দেখতে পাচ্ছেন, খালি () এগুলির জন্য সত্য প্রত্যাবর্তন করে, তবে is_null () কেবল তাদের মধ্যে 2 এর জন্য এটি করে।
আমি ইথান কেন্ট পোস্ট করা উত্তরটি প্রসারিত করছি । এই উত্তরটি অ-নাল আর্গুমেন্টগুলি বাতিল করবে যা অ্যারে_ফিল্টারের অভ্যন্তরীণ কাজের কারণে মিথ্যা হিসাবে মূল্যায়ন করে যা কোনও coalesceফাংশন সাধারণত যা করে তা নয় । উদাহরণ স্বরূপ:
echo 42 === coalesce(null, 0, 42) ? 'Oops' : 'Hooray';
ওহো
এটি কাটিয়ে উঠতে, একটি দ্বিতীয় যুক্তি এবং ফাংশন সংজ্ঞা প্রয়োজন। Callable ফাংশন বলার জন্য দায়ী array_filterহোক বা না হোক বিন্যাসের ফলাফল বর্তমান অ্যারের মান যোগ করুন:
// "callable"
function not_null($i){
return !is_null($i); // strictly non-null, 'isset' possibly not as much
}
function coalesce(){
// pass callable to array_filter
return array_shift(array_filter(func_get_args(), 'not_null'));
}
আপনি যদি সহজেই পাস করতে পারেন issetবা 'isset'২ য় তর্ক হিসাবে তর্ক করতে পারেন তবে এটির array_filterভাগ্য ভাল।
ক্লোজার সহ পিএইচপি 5.3+:
function coalesce()
{
return array_shift(array_filter(func_get_args(), function ($value) {
return !is_null($value);
}));
}
ডেমো: https://eval.in/187365
??