我尝试构建一个函数,可以为我检查一组字符串并查明它是否为空字符串(""),所以在玩了一段时间后,我创建了这个:
function blank() {
$args = func_get_args();
$result;
foreach ($args as $arg) {
if ($arg == "") {
$result = TRUE;
continue;
} else {
$result = FALSE;
return $result;
}
return $result;
}
return $result;
}
$name = "Hamed";
$email = "";
if (!blank($name, $email)){
$msg = "Not blank";
} else {
$msg = "It's blank!";
}
echo $msg;
它完美地工作! 但现在问题是我不了解其工作原理的详细步骤。 每行的工作原理以及关键字如何继续以及在不同的代码勺中输出返回结果。 感谢
编辑:BTW empty()和isset()在这种情况下不起作用,因为一旦我点击提交按钮,结果都是isset()和!empty()= TRUE。
答案 0 :(得分:3)
让我们在多次迭代中这样做:
首先,让我们删除明显多余的代码
<?php
function blank() {
$args = func_get_args();
// $result; - superfluous, that's a no-op
foreach ($args as $arg) {
if ($arg == "") {
$result = TRUE;
continue;
}
else {
$result = FALSE;
return $result;
}
/* code execution will never reach this point
because the if-branch jumps right back to the loop header
and the else-branch exists the function completely
therefore:
*/
// return $result; -superfluous,
}
return $result;
}
第二次迭代:删除一点不那么明显多余的代码
function blank() {
$args = func_get_args();
foreach ($args as $arg) {
if ($arg == "") {
$result = TRUE;
// no need for "continue" here; there's nothing else in the loop (anymore)
// than the if-else branch
//continue;
}
else {
// no need to assign the return value to any variable here
// $result = FALSE;
// return $result;
return FALSE;
}
}
return $result;
}
所以,剩下的就是
function blank() {
$args = func_get_args();
foreach ($args as $arg) {
if ($arg == "") {
$result = TRUE;
}
else {
return FALSE;
}
}
return $result;
}
它遍历arguments数组并一次又一次地执行if-branch,一次又一次地设置$ result = TRUE - 直到else-branch执行一次,这只返回FALSE。登记/> 如果从不对整个数组执行else-branch,它返回$ result,它只能是TRUE(由if-branch设置)或undefined(当数组$ args中没有元素时,因此都不是if - 也没有执行else分支。)
因此,您甚至可以进一步简化:
function blank() {
$args = func_get_args();
foreach ($args as $arg) {
if ($arg != "") {
// if there is one non-blank element in the arguments -> return false
return FALSE;
}
}
// there was no non-blank element in the arguments array ->
return true;
}
(我把边缘情况留给你......,例如调用空白(),根本没有参数)
编辑:我将$args=func_get_args()
行留在那里(而不是foreach(func_get_args()....
,因为新的(呃)variable-length argument lists语法看起来像
function blank(...$args) {
foreach ($args as $arg) {
if ($arg != "") {
return false;
}
}
return true;
}
答案 1 :(得分:2)
以下是相同的代码,其中添加了一些注释以澄清事情
function blank() {
//put all arguments passed to function in $args array (allows any number of args)
$args = func_get_args();
$result; //initialize $result (not needed)
foreach ($args as $arg) { //Loop through $args
if ($arg == "") {
$result = TRUE;
continue; //Do not process any more line in this loop (continue to next item)
} else {
//if the arg is not empty return False
$result = FALSE;
return $result;
}
//This will never be reached
return $result;
}
//if all arguments were empty we will reach this point
//At that point $result will be True, so return True;
return $result;
}
这是一个优化,可能更容易理解函数的作用:
function blank() {
//put all arguments passed to function in $args array (allows any number of args)
$args = func_get_args();
foreach ($args as $arg) { //Loop through $args
if ( ! emtpy($arg) ) {
//Return False if we ever find a non empty argument
return False
}
}
//if all arguments were empty we will reach this point
//At that point $result will be True, so return True;
return True;
}
当然还有很多其他方法可以重写它。
答案 2 :(得分:0)
您的代码似乎对您有用,但事实上它并非如此。 如果它正常工作,那么它会超出每个$ name和$ email的结果。 函数中有3个返回值,因此函数在此行停止并仅返回第一个参数的结果。 我不会进一步解释,但我建议你继续学习php的基础知识。 请仔细阅读下面的代码,并与您的代码进行比较,并尝试了解您的代码有什么问题。 我们都从错误中吸取教训:) 祝你好运
这是你的代码重写:
<?php
function blank(){
$args = func_get_args();
$result = array();
foreach ($args as $key) {
if ($key == "") {
$result[] = array("$key", "It's blank");
}
else{
$result[] = array("$key", "Not Blank");
}
}
return $result;
}
$name = "Hamed";
$email = "";
$data = blank($name, $email);
print_r($data);
?>
输出:
Array (
[0] => Array ( [0] => Hamed [1] => Not Blank ),
[1] => Array ( [0] => [1] => It's blank )
)