允许PHP函数变量是字符串还是数组是模式还是反模式?

来自C#我习惯用可变类型的参数重载我的方法.由于你不能在PHP中这样做,我经常创建方法,如下面的例子接受一个变量,然后检查类型并采取相应的行动:

showLength('one');
showLength(array(
    'one',
    'two',
    'three'
));

function showLength($stringOrArray) {
    $arr = array();
    if(is_array($stringOrArray)) {
       $arr = $stringOrArray;
    } else if(is_string($stringOrArray)) {
       $arr[] = $stringOrArray;
    } else {
        //exception
    }
    foreach ($arr as $str) {
        echo strlen($str).'<br/>';
    }
}

输出:

3
3
3
5
4

这给了我与C#相同的功能,但它看起来有点乱,好像有更好的方法.

这是在PHP(5.3)中进行方法重载的可接受方式还是有更好的方法?

最佳答案
我知道很多框架都会在某些有意义的函数中执行此操作,就像PHP的一些核心函数一样. “好”用法和“差”用法之间的区别在于文档(docblock).文档需要指出param是混合类型和不同的可接受变量类型.

例如:

<?php
/**
  * Function used to assign roles to a user
  * @param int   $user_id The user's id
  * @param mixed $role    Either a string name of the role 
  *                       or an array with string values
  *
  * @return bool on success/failure
  */ 
function addRole($user_id, $role) {
  if (!is_array($role)) {
    $role = array($role);
  }

  foreach($role as item) {
    Model::addRole($item);
  }

  return true;
}

转载注明原文:允许PHP函数变量是字符串还是数组是模式还是反模式? - 代码日志