2

以下のコードでは、私のWebサイトクラスのget_status()メソッドは、必要に応じてtrueまたはfalseではなく1を返します。誰か教えてもらえますか?私のクラスではおそらく間違いだと思います。このコード行がget_status()メソッド内で適切に実行されているかどうかはわかりません。

$ httpcode = $ this-> get_httpcode();

$ siteUpをエコーすると、URLをhttp://www.google.comまたはhttp://www.dsfdsfsdsdfsdfsdf.comのどちらとして指定しても、常に1になります。

私はオブジェクト指向のphpにかなり慣れていません。これは自分自身にクラスを教えるのは初めてであり、これは私がoopを学ぶために構築している例です。Webサイトのステータスを確認し、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

4 に答える 4

5

1は、PHPが「true」を文字列に変換する方法です。

<?php echo true; ?>

1が表示されます。

PHPでは、1に対するテストとtrueに対するテストはほとんど同じです。

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

表示する文字列になります...ただし、「true」と「false」はどちらも有効な文字列であり、ブール値のTRUEが得られるため、真理をテストすることはできません。

于 2012-08-27T09:21:15.320 に答える
2

TRUEまたはのいずれかであるブール値を返していますFALSE(ただし、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);
于 2012-08-27T09:20:35.087 に答える
2

簡単な演習として、以下のコードを実行してみてください。

<?php 
    echo true;
?>

あなたがしようとしているのはブール値を出力し、文字列「true」または「false」を期待することです。あなたは次のようなことをすることができます:

$booleanVal? "true":"false";
于 2012-08-27T09:21:10.493 に答える
0

印刷は避けてくださいtrue/ false。ifステートメントを使用して、実際に何が返されるかを確認します。何$siteUpを印刷する予定ですか?

if($siteUp) { 
    echo "Up"; 
} else { 
    echo "Down"; 
}
于 2012-08-27T09:24:07.083 に答える