PHP if语句自动运行

时间:2011-09-13 22:08:35

标签: php cakephp

可能是一个n00b问题,但请看下面的代码:

function admin_delete ( $id )
{

    if ($this->User->delete($id))
    {
        $this->Session->setFlash('The user with id: ' . $id . ' has been deleted!');
        $this->redirect(array('controller' => 'users', 'action' => 'admin_index'));
    }
}

现在,就我而言,这将加载admin_delete视图,然后当用户删除用户时,它会执行if语句中的内容。但是它会立即删除???为什么?因为它只是检查删除是否已经发生,并且它们在方法中没有任何内容可以说实际删除它。那么为什么if语句中的代码只是自动运行,如果没有条件返回true或者在if语句之外调用函数delete:/

干杯

2 个答案:

答案 0 :(得分:3)

好吧,让我们来看看你的if语句是如何构建的。

if ($this->User->delete($id))

你基本上说,“如果调用函数delete返回true,则运行其他代码”。为了查看它是否返回true,必须调用该函数。基本上,由于这不是复合布尔表达式,因此将始终对函数调用进行求值。

答案 1 :(得分:0)

http://www.php.net/manual/en/language.expressions.php

在必要时阅读关于表达式转换为其布尔值的最后一段。因此,即使delete函数没有显式返回TRUE或FALSE,它也可能返回一个被转换为TRUE的值。另外,正如所建议的那样,删除函数总是被调用并按照建议进行评估。

http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting