恼人的ASP之逻辑运算

April 25, 2014
asp

最近给东家的网站加入反恶意图片链接功能,东家的网站是用asp写的。

一个很简单的If语句,让哥们困惑了半天。

<%
If Not IsValidRequestUrl(url) And Not IsValidUrl(url) Then
    '不允许发布
End If
%>

问题是,第一个条件是false了后依然去执行了IsValidUrl,这样就造成了大量不用检查的链接进入了检查程序,这样是非常浪费资源的。

再看上面的语句,在js,php,c等语言中,编译器会对逻辑运算优化,也就是,如果是and,左边的是false了,and后面的不会去计算,而asp中却不是这样。

ASP中测试:

<%
Function test1()
    response.write "test1 function processed<br>"
    test1 = False
End Function

Function test2()
    response.write "test2 function processed<br>"
    test2 = True
End Function

If test1() And test2() then
    Response.write "Will not printed!"
End If

Response.End
%>

执行结果如下: asp-boolean-operation-test-result

同样的在php中

<?php

function test1()
{
    echo 'test1 Processed!'.PHP_EOL;
    return false;
}

function test2()
{
    echo 'test2 Processed!'.PHP_EOL;
    return true;
}

if (test1() and test2()) {
    echo 'will not print!';
}

请输入图片描述