没有使用框架的老程序中经常会有获取$_GET['id'],而id确不存在,开启报错时,都会看到好多报错。
一种最原始的手动判断(一大坨,影响逻辑的代码)
写一个判断变量是否存在的函数(用的时候感觉怪怪的)
另一种情况是未知成员对象引用也会报错
PS:开发环境拒绝关闭报错
一种最原始的手动判断(一大坨,影响逻辑的代码)
写一个判断变量是否存在的函数(用的时候感觉怪怪的)
另一种情况是未知成员对象引用也会报错
PS:开发环境拒绝关闭报错
1
shiny PRO 最低等:isset
中级: filter_input 终极:开发框架集成自动处理 |
2
AlloVince Jun 7, 2015 $params = array_merge(['id' => ''], $_GET);
if ($params['id']) ... |
3
zhengkai Jun 7, 2015
$_GET += [
'id' => 0, 'page' => 1, ]; |
4
zhengkai Jun 7, 2015 这种方法一般不用在 _GET _POST 上,因为网页参数要做很多处理,没有特别声明的整数要禁止负数,字符串要确保是 utf-8 的,等等
一般用在参数上, += 不仅仅是比 array_merge() 简短,还能避免一个坑。如果你的 key 恰好是 0,1,2 这种的,+= 是覆盖,array_merge 的话会给你搞出 3,4,5,3 个 key 变成 6 个 key …… |
6
fbzl OP |
8
moro Jun 7, 2015
@
|
9
b821025551b Jun 7, 2015 via Android
empty配合三目
|
10
em70 Jun 7, 2015
error_reporting(0)
世界不就清静了 |
12
yangmls Jun 7, 2015 |
13
fbzl OP @zhengkai 手册上写的
array (PHP 4, PHP 5) array — Create an array --- As of PHP 5.4.x you can now use 'short syntax arrays' which eliminates the need of this function. Example #1 'short syntax array' <?php $a = [1, 2, 3, 4]; print_r($a); ?> --- @b821025551b empty()会提示'PHP Notice: Undefined index: id',就是为了避免这个问题的,我才问的 @em70 问题描述中特别指明了,不能关闭报错 |
14
fbzl OP |
15
yangmls Jun 7, 2015 @fbzl 也是 laravel 的,一个处理 Closure 的函数
https://github.com/laravel/framework/blob/5.0/src/Illuminate/Support/helpers.php#L782 |
16
yangmls Jun 7, 2015
楼上的 merge 方案无法处理多重数组的情况,而 laravel 能够简单地用 array_get($arr, 'foo.bar') 来获取
楼上的 isset 问题也考虑到了,所以用的 array_key_exists |
19
micate Jun 7, 2015
自己实现一个类似 laravel 的 array_get() 方法是比较方便的,而且也不费电呀。
|
20
geeglo Jun 7, 2015
$id = empty($_GET['id']) ? 1 : intval($_GET['id']);
这样写不会报错的呀~你是不是记错了? |
22
lyragosa Jun 7, 2015
我是直接禁用所有报错信息,眼不见为净。
历史遗留没那么好修的 |
24
tcsky Jun 7, 2015
写一个全局的 array_get函数,用来处理数组.
|
26
skydiver Jun 7, 2015
优雅的方法就是不要直接读取全局变量$_GET $_POST,而是用框架提供的方法。
|