<?php declare(strict_types=1);
test('test');
strlen([]);
function test(int $p){
return [];
}
// 错误异常示例.
declare(strict_types=1); php 7 开始, 将declare放每个php文件的顶行, 标明文件为严格模式.
这样你的代码就无比强壮兼容了. 注意,declare仅对当前文件生效, 所以每一个php文件都要写一次,
另外能否不处理错误, 继续执行呢? 答案是否定的.
示例
<?php declare(strict_types=1);
error_reporting(0); // 不显示错误.
strlen(3);
echo 'show href?';
即使配置了不显示错误, 代码也已经在strlen函数处中止.
所以强制兼容的做法是去掉 declare,继续采用非严格模式.
这时你可能会想着把所有函数换成任意类型参数. 比如示例.
<?php declare(strict_types=1);
test([]);
function test($p){ // 任意类型.
return strlen($p); //但里面的操作不是任意的.
}
test函数现在不报错了, 但里面的strlen仍然会错误提示:
Fatal error: Uncaught TypeError: strlen() expects parameter 1 to be string, array given in D:\Qampp\htdocs\test.php:5 Stack trace: #0 D:\Qampp\htdocs\test.php(3): test(Array) #1 {main} thrown in D:\Qampp\htdocs\test.php on line 5
这此可以验证, 类型检查不是单单关注定义, 传入值本身的类型, 也会检查.
那这怎么解决呢? 待后续.
END
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。