出现了无法理解的情况。将值传递false给常规函数时,默认值 =null正确分配或输出的值:
function some(?bool $a = null)
{
var_dump($a);
}
some();
some(true);
some(false);
结果:
NULL
bool(true)
bool(false)
但是,当我尝试通过 将相同的参数传递给控制器参数时,返回的route值是,因此给出了不正确的结果。是什么原因造成的?也许 codeigniter在参数中
以某种不同的方式处理它?-s:falsetruefalseRoute
$routes->get('default', 'Results::index');
$routes->get('successful', 'Results::index/true');
$routes->get('errors', 'Results::index/false');
控制器:
public function index(?bool $decline = null)
{
var_dump($decline);
exit;
}
结果:
NULL
bool(true)
bool(true)
在这种情况下,true 和 false 是字符串,而不是布尔值。因为该函数采用 bool 参数,所以非空字符串被转换为 true。你将不得不做这样的事情
是的,CodeIgniter 可能有一些特定的路由参数处理导致了这种行为。这可能是因为路由参数被视为字符串,并且在将它们转换为布尔值时使用了非严格比较。
要解决这个问题,您可以尝试使用花括号语法在路由中显式指定参数的类型。例如:
这里我们明确指定参数必须为“false”或“0”。如果这没有帮助,那么您可以尝试使用 filter_var 函数将参数转换为控制器内部的布尔值:
这里我们使用 filter_var 函数将字符串转换为布尔值,使用 FILTER_VALIDATE_BOOLEAN 和 FILTER_NULL_ON_FAILURE 选项。这将使我们能够获得正确的布尔值,即使参数值不是严格的“真”或“假”。