get_status()函数返回1而不是true或false,为什么?

时间:2012-08-27 09:17:00

标签: php oop class

在下面的代码中,我的网站类中的get_status()方法返回1而不是像我想要的那样返回true或false。有谁能告诉我为什么好吗?我认为这可能是我班上的一个错误,我不确定这行代码是否是get_status()方法中的好习惯?

$ httpcode = $ this-> get_httpcode();

当我回显$ siteUp时,无论我将网址设为http://www.google.com还是http://www.dsfdsfsdsdfsdfsdf.com

,我始终为1

我对面向对象的php相当新,这是我第一次自学课程,这是我正在构建学习oop的一个例子。它设计用于检查网站状态,并根据httpcode说明它是上升还是下降。

你有什么提示,为什么这不起作用将得到很大的回应。提前谢谢!

class website {
protected $url;

function __construct($url) {
    $this->url = $url;
}

public function get_url() {
    return $this->url;
}

public function get_httpcode() {
    //get the http status code
    $agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch=curl_init();
    curl_setopt ($ch, CURLOPT_URL,$this->url);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_VERBOSE,false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSLVERSION, 3);
    $page=curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return $httpcode;
}

public function get_status() {
    $httpcode = $this->get_httpcode();
    if ($httpcode>=200 && $httpcode<400) {
         $siteUp = true;
    } else {
        $siteUp = false;
    }
    return $siteUp;
}
}

// create an instance of the website class and pass the url
$website = new website("http://www.google.com");
$url = $website->get_url();
$httpcode = $website->get_httpcode();
$siteUp = $website->get_status();
echo "site up is set to: " . $siteUp;

4 个答案:

答案 0 :(得分:4)

1就是PHP如何将“true”转换为字符串

<?php echo true; ?>

将显示1。

在PHP中,针对1的测试和针对true的测试大多是相同的。

$siteUp = $website->get_status() ? "true" : "false";

将使它成为一个字符串供你显示...但是你无法对它进行真实的测试,因为“true”和“false”都是有效的字符串并且会给你一个布尔值TRUE。

答案 1 :(得分:2)

您正在返回一个布尔值,该布尔值为TRUEFALSE(但不是 true或false)。

您可以返回字符串,也可以在将其附加到echo语句之前进行转换:

例如:

public function get_status() {
    $httpcode = $this->get_httpcode();
    if ($httpcode>=200 && $httpcode<400) {
     $siteUp = 'true';
    } else {
    $siteUp = 'false';
    }
    return $siteUp;
}

或者如果你想将它保留为返回的布尔值,你可以使用一个非常简单的函数将它转换为这样的字符串:

public function showBool($myBool)
{
    return ($myBool) ? 'True' : 'False';
}

$someVar=false;
echo showBool($someVar);

答案 2 :(得分:2)

作为一个简单的练习,请尝试运行以下代码并亲眼看看:

<?php 
    echo true;
?>

您要做的是打印一个布尔值,并期望字符串“true”或“false”。你可以这样做:

$booleanVal? "true":"false";

答案 3 :(得分:0)

避免打印true / false。使用if语句来查看它实际返回的内容。 您希望$siteUp打印什么?

if($siteUp) { 
    echo "Up"; 
} else { 
    echo "Down"; 
}