我想编写一个函数来将一个未定义的变量设置为默认值,它可以阻止警告未定义的变量。
如果我使用isset()
函数来确定输入变量,如果变量等于NULL
,变量将更改为默认值。任何方法都可以实现吗?
示例:
function init_variable($input, $default = '123'){
...
return $inited_variable;
}
$variable1 = init_variable($_POST['ABC']);
$variable2 = init_variable($_POST['DEF'], 'DEF');
答案 0 :(得分:5)
自PHP 7以来,有一种更优雅的方式称为Null coalescing operator:
$variable1 = $_POST['ABC'] ?? 'DEFAULT VALUE'
答案 1 :(得分:1)
如果您只想设置默认值:
PHP< v7(三元)
$var = isset($_POST['ABC'])) ? $_POST['ABC'] : false;
PHP> = v7(null coalesce)
$var = $_POST['ABC'] ?? false;
任何(大致相当的)
$var = false;
if(isset($_POST['ABC'])) $var = $_POST['ABC'];
答案 2 :(得分:0)
如果$_POST['ABC']
不存在,则PHP将在此时引发错误:
init_variable($_POST['ABC'])
您无法阻止 init_variable
内的发生此错误。您的函数只会收到尝试访问未定义变量/索引的最终结果,它无法阻止这种情况发生。
你想要的只是null coalescing operator:
$variable1 = $_POST['ABC'] ?? '123';
或者也许:
$variable2 = isset($_POST['ABC']) ? $_POST['ABC'] : '123';
答案 3 :(得分:0)
您可以将其包含在项目中
https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php
或使用此品种
if ( ! function_exists('array_get'))
{
/**
* Get an item from an array using "dot" notation.
*
* @param array $array
* @param string $key
* @param mixed $default
* @return mixed
*/
function array_get($array, $key, $default = null)
{
if (is_null($key)) return $array;
if (isset($array[$key])) return $array[$key];
foreach (explode('.', $key) as $segment)
{
if ( ! is_array($array) || ! array_key_exists($segment, $array))
{
return $default;
}
$array = $array[$segment];
}
return $array;
}
}
它的作用是用点(.
)分割字符串,然后尝试获取该数组中的元素。所以如果你做array_get($ array,' foo');就像你输入$ array [' foo']一样。
但是如果变量在数组中设置,它将返回它的值。
null是一个有效值,但不是您在$ _POST数组中可能找到的值。
但是如果您还希望过滤掉空值,我建议您使用手动检查而不是全部捕获。有时你想要那个null。 但是如果你需要一个函数,我建议修改上面的函数
if ( ! function_exists('array_get'))
{
/**
* Get an item from an array using "dot" notation.
*
* @param array $array
* @param string $key
* @param mixed $default
* @return mixed
*/
function array_get($array, $key, $default = null)
{
if (is_null($key)) return $array;
if (isset($array[$key])) {
$value = $array[$key];
/**
* Here is the null check. You can also add empty checks and other checks.
*/
if(is_null($value)) {
return $default;
}
return $value
}
foreach (explode('.', $key) as $segment)
{
if ( ! is_array($array) || ! array_key_exists($segment, $array))
{
return $default;
}
$array = $array[$segment];
}
return $array;
}
}
然后你可以简单地使用
array_get($_POST,'abc','some default value');
这样你就不用担心它是否被证实。
额外的好处是,如果您有嵌套数组,这样可以轻松访问它们,而不必担心是否启动了较低的数组。
$arr = ['foo' => ['bar' => ['baz' => 'Hello world']]];
array_get($arr, 'foo.bar.baz', 'The world has ended');
array_get($arr, 'foo.bar.ouch', 'The world has ended');
答案 4 :(得分:0)
我使用:


 $ x = @ $ _ POST ['x'];

&# xA;
 通常我想要的不仅仅是默认值,所以我做了以下其中一个:


 if($ x){。 ..} //如果它可以被视为一个布尔值
 if(!empty($ x)){...} //对于空字符串但不是NULL的情况是可能的
 if(isset) ($ x)){...} //只检查存在