PHP什么都不返回(甚至不是NULL)

时间:2017-07-16 07:00:58

标签: php function return boolean

我正在编写代码,此时代码如下:

$reduced = is_reduced($pid);
set_sale($pid, $reduced);
echo " - " . $reduced . " - ";

所以,背后的逻辑应该是这样的: 如果产品减少,我会调用函数is_reduced()来了解。通常,它应该返回true或false。但我没有得到任何回报。你可以看到,我正在将带有echo的变量打印到控制台。但我没有看到任何东西。甚至不是NULL!

但是在控制台上,我可以看到它被“打开”并没有被打印出来。所以,它也应该返回一些。因为echo后跟函数is_reduced中的return命令(下面的代码)。

该功能的一些信息: 一页可以有多个价格。这就是为什么我有while循环的原因。如果只有一个价格,我会-1返回var aktueller_counter。所以,我跳进了第一个部落。在那里检查是否有更低的价格,如果是,如果这个价格不是0,不是“”而不是低于-1。

正如您所看到的,它显示echo后跟return。但为什么我没有得到任何NULL或任何布尔值?

我会很乐意帮忙! 亲切的问候!

这里是代码:

function is_reduced($pid){
    $aktueller_counter = -1;
    while(have_rows('product_shops', $pid)): the_row();
        $aktueller_counter = $aktueller_counter + 1;
    endwhile;

    if($aktueller_counter == -1){
        $price = get_field("product_shops_0_price", $pid);
        $price_old = get_field("product_shops_0_price_old", $pid);

        if($price_old < $price) {
            if ($price_old != "") {
                if ($price_old != 0) {
                    if ($price_old > -1) {
                        $price = null;
                        $price_old = null;
                        $aktueller_counter = null;

                        echo ", is \"reduced\"";

                        return true;
                    } else {
                        $price = null;
                        $price_old = null;
                        $aktueller_counter = null;

                        echo ", is NOT \"reduced\"";

                        return false;
                    }
                } else {
                    $price = null;
                    $price_old = null;
                    $aktueller_counter = null;

                    echo ", is NOT \"reduced\"";

                    return false;
                }
            } else {
                $price = null;
                $price_old = null;
                $aktueller_counter = null;

                echo ", is NOT \"reduced\"";

                return false;
            }
        } else {
            $price = null;
            $price_old = null;
            $aktueller_counter = null;

            echo ", is NOT \"reduced\"";

            return false;
        }
    }else{
        for($i = 0; $i <= $aktueller_counter; $i++){
            $price = get_field("product_shops_".$i."_price", $pid);
            $price_old = get_field("product_shops_".$i."_price_old", $pid);

            if($price_old < $price){
                if($price_old != ""){
                    if($price_old != 0){
                        if($price_old > -1) {
                            $price = null;
                            $price_old = null;
                            $aktueller_counter = null;

                            echo ", is \"reduced\"";

                            return true;
                        }
                    }else {
                        $price_old = null;
                        $price = null;
                    }
                }else {
                    $price_old = null;
                    $price = null;
                }
            }else {
                $price_old = null;
                $price = null;
            }
        }


        $price = null;
        $price_old = null;
        $aktueller_counter = null;

        echo ", is NOT \"reduced\"";

        return false;
    }
}

2 个答案:

答案 0 :(得分:1)

当向屏幕显示布尔值时,您可以更轻松地使用var_export()而不是echo。您的代码完全可能在false返回(或至少其中一些)时正常工作。

考虑这些事件:(Demo

var_export(false);
    echo "\n----\n";
echo false;
    echo "\n----\n";
var_export(true);
    echo "\n----\n";
echo true;
    echo "\n----\n";
var_export(null);
    echo "\n----\n";
echo null;
    echo "\n----\n";

输出:

false
----

----
true
----
1
----
NULL
----

----

the_row();有什么用途?

您可以将$aktueller_counter = $aktueller_counter + 1;替换为++$aktueller_count;

而不是重复:

$price = null;
$price_old = null;
$aktueller_counter = null;

在条件集之前将这些值声明为默认值是DRYer,并且只在必要时覆盖它们。

由于您未归还$price$price_old$aktueller_counter,因此没有理由声明它们。它们仅存在于函数的范围内。 (除非您修改了此帖子的代码,并且实际上是在使用这些变量。)

此外,您的条件陈述相当冗长/众多。经过仔细考虑,您应该能够减少总条件语句并编写更简洁的代码。

答案 1 :(得分:0)

Boolen Value不会得到回声而不是它你可以将它显示为字符串。试试这个:

$reduced = is_reduced($pid);
set_sale($pid, $reduced);
$reduced_str = $reduced ? 'true' : 'false';
echo " - " . $reduced_str . " - ";