这个PHP语法是什么意思,为什么这个变量是NaN?

时间:2011-10-05 06:34:49

标签: php javascript jquery

问号难以在谷歌中搜索。

这是一步一步意味着什么?

 $page = isset($_POST['page'])?$_POST['page']:"0";

我猜这意味着如果Post['page']被设置使用该值,如果不使用0?但我没有详细说明。我也var_dump($page)时得到"NaN";即使POST['page']尚未设置为任何内容。发生了什么事?

- >为了完全公开,我使用这个Javascript函数来传递page..的值,以便加载更多" /分页功能。

$(function(){
    $("#more").click(loadPosts);
    loadPosts();
      var count = 0;
        var num = 2;
    function loadPosts() {
        $(".loading").show("fast");
        count += num;
        $.post("load.php", {'page': count}, function(data){
            $("#contents").append(data);
            $(".loading").hide("fast");
        });
    }
});

6 个答案:

答案 0 :(得分:3)

?运算符称为三元运算符,您可以查看更多有关它的信息。但你理解正确。

基本上代码意味着:如果变量已设置,则使用它,否则默认为0.(在php严格模式下,您无法访问不存在的数组索引,因此此代码可以避免该错误。)< / p>

NaN不是一个数字 - 但PHP不使用(编辑:很少使用),它可能是从Javascript发送的,很可能是因为你试图将数字除以0(大概是在计算页面的上下文中) )。我发布的代码中没有看到任何内容,但也许它发生在其他地方。

答案 1 :(得分:3)

VARIABLE = (CONDITION) ? VALUE1 : VALUE2;

的缩写
if (CONDITION)
    VARIABLE = VALUE1;
else
    VARIABLE = VALUE2;

您可以使用类似的表示法来缩写传统的if-else语句:

(CONDITION) ? FUNCTION1 : FUNCTION2;

的缩写
if (CONDITION)
    FUNCTION1;
else
    FUNCTION2;

答案 2 :(得分:3)

?:语法称为ternary operator,完全符合您的想法。如果第一部分(在?之前)是真实的,则使用第一个选项(在:之前);如果没有,第二个选项是。

您收到的错误是因为您尚未设置数字值。这是浏览器读取代码的方式:

$(function(){
    function loadPosts() {
        $(".loading").show("fast");
        count += num;
        $.post("load.php", {'page': count}, function(data){
            $("#contents").append(data);
            $(".loading").hide("fast");
        });
    }
    var count;
    var num;
    $("#more").click(loadPosts);
    loadPosts();
    count = 0;
    num = 2;
});

正如您所看到的,count += num将在 var count = 0var num = 2运行之前设置,因为loadPosts()在设置之前运行。这是因为称为“提升”的东西,其中函数和变量声明被移动到其包含范围的最顶层。

因为您尝试将undefined添加到undefined(因为尚未设置任何变量),您会得到NaN:“不是数字”。要解决此问题,请在调用loadPosts之前将函数和变量声明移到范围顶部:

$(function(){
    function loadPosts() {
        $(".loading").show("fast");
        count += num;
        $.post("load.php", {'page': count}, function(data){
            $("#contents").append(data);
            $(".loading").hide("fast");
        });
    }
    var count = 0;
    var num = 2;
    $("#more").click(loadPosts);
    loadPosts();
});

答案 3 :(得分:0)

isset($_POST['page']) ? $_POST['page'] : "0";是一个三元if声明。条件是?之前的部分。 ?之后的第一部分是表达式为true时要赋值的值。 :之后的部分是由表达式的假值产生的赋值。

答案 4 :(得分:0)

它被称为ternary operator 您的第二个问题 - $_POST['page']$page不一样,如果要检查变量,则需要测试$ _POST变量。

答案 5 :(得分:0)

您的javascript将NaN作为字符串传递给您的PHP脚本。你可以试试这个:

$page = isset($_POST['page']) && $_POST['page'] != "NaN" ? $_POST['page'] : "0";

或者你可以改变你的javascript来做那边的检查:

count += num;
if (isNaN(count))
{
    count = 0;
}