来自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/>';
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
3
3
3
5
4
Run Code Online (Sandbox Code Playgroud)
这给了我与C#相同的功能,但它看起来有点乱,好像有更好的方法.
这是在PHP(5.3)中进行方法重载的可接受方式还是有更好的方法?
Mik*_*e B 11
我知道很多框架都会在某些有意义的函数中执行此操作,就像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;
}
Run Code Online (Sandbox Code Playgroud)