转换为数组VS is_array()

Ste*_*314 5 php arrays performance casting

有没有人知道任何问题,性能或其他问题,可以通过将变量转换为数组而不是先检查它来实现?

// $v could be a array or string
$v = array('1','2','3'); 
Run Code Online (Sandbox Code Playgroud)

要么

$v = '1';
Run Code Online (Sandbox Code Playgroud)

代替:

if (is_array($v)) foreach ($v as $value) {/* do this */} else {/* do this */}
Run Code Online (Sandbox Code Playgroud)

我已经开始使用:

foreach((array) $v as $value) {
    // do this
}
Run Code Online (Sandbox Code Playgroud)

它会停止重复代码 - 但性能是我的想法,而不是丑陋的代码.

另外,有谁知道php如何处理将数组转换为数组?没有抛出任何错误,但是php引擎是否检查它是否为数组,然后在执行转换过程之前返回结果?

Kin*_*nch 7

第一:过早优化是万恶之源.永远不要让性能影响您的编码风格!

当你需要一个数组但是想要允许单个值时,转换为数组允许一些不错的技巧

$a = (array) "value"; // => array("value")
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会导致一些不需要的(或想要的,但不同的)行为

$a = new stdClass;
$a->foo = 'bar';
$a = (array) $a; // => array("foo" => "bar");
Run Code Online (Sandbox Code Playgroud)

但是,这一个

if(is_array($v)) {
  foreach($v as $whatever) 
  {
    /* .. */
  }
} else {
  /* .. */
}
Run Code Online (Sandbox Code Playgroud)

允许您决定可能发生的每种类型应该发生什么.如果你将它"盲目地"投射到数组中,这是不可能的.

简而言之:只需选择最符合情况需求的那个.