【问题标题】:Confused about return statement in user defined function对用户定义函数中的返回语句感到困惑
【发布时间】:2011-04-11 17:51:32
【问题描述】:

我对退货声明没有什么疑问。

a) 是否必须在用户定义的函数中定义 return 语句?

b) 如果我只定义一个没有任何参数的 return 语句,它仍然有效吗?它会返回空值吗?

c) 下面的函数有效吗?

function admin_credential($password = 0, $email = 0) {
     if( $password != 0) {
         $password = sha1($password);
         $query = "UPDATE admins SET password = '$password'";
         $result = mysql_query($query);
         }
     if( $email != 0) {
         $query = "UPDATE admins SET email = '$email'";
         $result = mysql_query($query);            
         }
         return;
         }

【问题讨论】:

  • 它是有效的,但那是可怕的语法格式......我发现考虑到行的嵌套方式,弄清楚发生了什么非常棘手。
  • @Stepehn Orr,我考虑不使用那种语法格式,谢谢你的提示 :)
  • @Stephen Orr ~ 这叫Banner样式缩进,还不错。我自己更喜欢 OTBS。

标签: php function return-value return user-defined-functions


【解决方案1】:

a) 是否必须在用户定义的函数中定义 return 语句?

没有。

b) 如果我只定义一个没有任何参数的 return 语句,它仍然有效吗?它会返回空值吗?

是的。

c) 下面的函数有效吗?

是的,但是$result 将会丢失,因为您没有归还它。 return 不是必需的。

【讨论】:

  • 我明白了,return 语句能够返回值以及停止脚本。不是吗?
  • @Ibrahim 是的,虽然“停止脚本”并不完全准确:它退出了 函数(这可能就是你的意思)。
  • 扩展@Pekka 的评论,return 的意思是“返回调用该函数的代码”。它不是必需的,因为前面的代码会在函数结束时自动恢复。不需要返回值,因为无论是否使用值都可以恢复调用代码。仅当您想要发送值或提前终止函数时,才需要return 语句。
【解决方案2】:

a) 是否必须在用户定义的函数中定义 return 语句?

没有。有时您编写的函数不会向被调用函数返回任何内容,例如一个以漂亮方式打印多维数组的函数。

b) 如果我只定义一个没有任何参数的 return 语句,它仍然有效吗?它会返回空值吗?

是的。省略return 与不带任何参数的return 相同,都返回NULL

c) 下面的函数有效吗?

它在语法上是有效的。但是如果你返回一个布尔值来标记查询的成功/失败会更有意义。以便调用者知道数据库更新是否正常。

编辑:

"UPDATE admins SET password = '$password'"

查询缺少WHERE 子句。所以它有效地更新了admins表中所有用户的密码。

【讨论】:

    【解决方案3】:

    a) 您不需要在 PHP 中的函数末尾返回值。这大致相当于C的void函数。

    b) 没有值的return 是有效的,但它可能会让其他人稍后查看您的代码感到困惑,因此将其作为您的标准做法是一个坏主意。考虑返回NULL,效果相同。

    c) 是的,您的函数使用有效的语法。

    【讨论】:

    • 对于 b,return 是一个控制结构,在函数完成其工作的任何时候使用它都是完全有效和有用的。如果一个函数没有返回任何内容,并且该函数可以在代码中的多个点逻辑完成,那么不带参数的返回不应该造成混淆。
    • 完全不同意 b)。如果需要退出当前范围,return 是一种方法。
    • function myfunc() { return; } 不如function myfunc() { return NULL; } 清晰,以我的拙见。两者都会在赋值时导致语法错误,但 NULL 明确说明正在发生的事情。是否按顺序进行编辑?
    • 我会说 return null 应该用于通常返回某些内容的函数显式不返回任何内容的情况,而 return 应该用于通常不返回任何内容但需要返回控制权的函数到调用代码。
    【解决方案4】:

    当您查看用于用户身份验证的 PHP 表时,需要考虑很多事情。您必须考虑如何将数据存储在表中以及如何检索它。这意味着您需要考虑有多少用户将有权访问,以及有多少用户类型。如果您有少数用户,甚至少于 10 个,我建议您不要打扰数据库用户身份验证。

    您提出的问题已经得到有效回答,但我敦促您尽量避免使用许多不必要的功能使您的系统复杂化:保持简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多