即使条件返回false,为什么这行代码会被执行?

时间:2012-06-15 15:15:25

标签: yii

也许有人可以帮助我。我有这些代码行:

1 $(document).ready(function(){
2 if('<?php echo Yii::app()->controller->action->id?>' == 'update'){
3   if('<?php echo Yii::app()->user->id;?>' != '<?php echo $model->createUser->id; ?>'){

我来了,

  

尝试访问非对象的属性(第3行)。

这是有道理的,因为我在这里没有对象。

问题是第二个if正在运行,即使第一个if条件返回FALSE。

Yii::app()->controller->action->id不等于更新&#39;所以,第二个IF不应该永远不会执行。所以,我不明白。

任何人都可以澄清这里发生的事情吗?

干杯

1 个答案:

答案 0 :(得分:2)

PHP将始终评估,因为这正在发生在服务器端,而Javascript将在客户端执行。当代码到达浏览器时,PHP已经全部被评估和替换,只留下了Javascript。换句话说,视图中的所有PHP都将被评估(可能是由Apache中的PHP解释器),并且在代码在浏览器中运行之前,Javascript无关紧要。

您需要将服务器端和客户端代码分开。

您的代码在服务器端失败,因为所有PHP都必须评估以呈现Javascript,在这种情况下,第三个PHP块:

<? if(isset($model)) echo $model->createUser->id; ?>

看起来当PHP运行时,已经设置了$ model,而不是预期的对象。