可能是一个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:/
干杯
答案 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