在此if语句中是否会执行副作用if

问题描述:

函数add_new_user是否在if语句内部运行SQL INSERT查询?在此if语句中是否会执行副作用if

我具备的功能

function add_new_user ($username, $email, $passhash_md5) 
{ 
    -- cut: database INSERT queries 
    return 1;                         
} 

我用上面

if (validate($username, $password, $email) == 1) { 
    if (add_new_user ($username, $email, $passhash_md5) == 1) { 
       // problem here 
       -- cut 
    }                           
} 

我问这个问题,因为我不知道为什么this handler总是给人不成功registraton通知的代码。这两个代码属于处理程序。该错误似乎在我的代码的语法中,也许在使用if/else。

+0

谢谢你的回答! – 2009-08-23 20:45:43

是否功能add_new_user运行 SQL INSERT查询,如果它是 如果-clause里面?

function foo() { 
    echo 'A'; 
    return true; 
} 

function bar() { 
    echo 'B'; 
    return false; 
} 

if (foo()) { 
    if (bar()) { 
    echo 'C'; 
    } 
} 
// Output: AB 

功能首先得到的评价为它的返回值。返回值是已知的

后,返回值是相对于整数值1.

是。运行if () {之间的任何内容以查看它是否为真。你真的可以在这里做任何事情。

PHP必须评估布尔表达式才能知道它是否会执行该块。因此,要评估“==”运算符,它需要评估双方,包括函数“add_new_user”。

因此,答案是:,它将评估功能add_new_user和它将执行插入操作(除非你有内部add_new_user这将阻止这样的代码)。

但是,您正在做一些应尽可能避免的事情:您正在使用具有副作用的情况!这会让你头疼(例如,现在!)。

+0

你能否澄清一下你的意思是副作用?但是,您的答案表明我不需要检查功能是否已被访问。 **我仍然想看看查询是否成功。** – 2009-08-23 20:37:06

+1

副作用是类似于:写入磁盘/流/数据库,打开连接等。您应该知道哪个函数有副作用(add_new_user有一个,例如)。然后,你必须知道,当你调用这些函数时,会产生副作用。你原来的问题可以改写为:“这个'if'陈述会带来副作用吗?”。当然,你必须检查它是否成功,你的做法并不坏。请记住我对副作用所说的话。谷歌为“纯功能”或“副作用免费功能”的更多信息! – 2009-08-23 20:46:53