数组分解为变量,要用extract()函数吗

if (is_array($length)) {
    foreach ($length as $key => $value) {
        $$key = $value;
    }
}

extract($length, EXTR_PREFIX_ALL,'prefix_');

就是把数组中的键名,用作变量名,变量值为数组的键值。
上面哪个比较好用?
还有别的好的么?

阅读 1.7k
1 个回答

两者之间一定要选一个的话,那肯定是 extract ,且应该结合实际情况,填充其提供的第二个 flags 、第三个参数 prefix。

但是实际并不建议使用这种方式,其能会存在一些问题:

  • 1、可能会存在意外的变量污染。比如 extract 的默认行为是覆盖已存在的,这样在一些场景会存在安全问题,即使你提供了 prefix ,也还是有可能。
  • 2、可能会不符合预期,如 extract 的第二个参数有丰富的设定,比如不覆盖、或者当重复是使用 prefix 参数,这些可能存在一些不符合预期的行为。
  • 3、开发过程中不可验证性,对于开发过程中,对于这种情况很容易造成开发人员、开发工具无法理解,且现代化 IDE 也无法对此类情景进行提示、纠错等。

对此,若非必要,应该尽量避免使用这类行为。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题