如何解决PHP - 避免编写嵌套的 if 语句
我有这个变量:
$otcId;
可以从 3 个不同位置检索哪个值(请记住,该值在所有位置始终相同):
$otcId = $this->dat['id_rfcOV'];
$otcId = $this->request['id_rfcOV'];
$otcId = $this->response['id_rfcOV'];
我的方法如下:
$otcId = $this->dat['id_rfcOV'];
if(isset($this->dat['id_rfcOV'])){
$otcId = $this->dat['id_rfcOV'];
} elseif(isset($this->request['id_rfcOV'])) {
$otcId = $this->request['id_rfcOV'];
} elseif(isset($this->response['id_rfcOV'])) {
$otcId = $this->response['id_rfcOV'];
}
解决方法
如果我是你,我会把它包装在一个函数中,并使用 null coalescing operator 来简化检索和默认值的返回。
<?php
class MyController
{
private array $dat = [];
private array $request = ['id_rfcOV' => 'foo'];
private array $response = ['id_rfcOV' => 'bar'];
/**
* @param string $name Parameter name
* @param null $default Default value to return if no matching parameters are found
* @return mixed|string|null
*/
function getParam(string $name,$default=null)
{
return $this->dat[$name] ?? $this->request[$name] ?? $this->response[$name] ?? $default;
}
function test(): void
{
// Using a member function,we can get our parameter value with a one-liner
$otcId = $this->getParam('id_rfcOV');
assert($otcId == 'bar','Value should be from the last array checked');
printf("Value is %s \n",$otcId);
$val = $this->getParam('non-existent','wombats');
assert($val == 'wombats','Value should be the default');
printf("Value is %s \n",$val);
}
}
$myController = new MyController();
$myController->test();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。