В приведенном ниже коде метод get_status () в моем классе веб-класса возвращает 1 вместо true или false, как я этого хочу. Может ли кто-нибудь сказать мне, почему, пожалуйста? Я думаю, что это, наверное, ошибка в моем классе, я не уверен, является ли эта строка кода хорошей практикой в методе get_status ()?
$ httpcode = $ this-> get_httpcode ();
Когда я эхо $ siteUp, я всегда ставил ли я URL-адрес как http://www.google.com или http://www.dsfdsfsdsdfsdfsdf.com
Я довольно новичок в объектно-ориентированном 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;
1 – это то, как PHP преобразует «истину» в строку
<?php echo true; ?>
Отобразится 1.
В PHP тестирование с 1 и тестирование против истины в основном одно и то же.
$siteUp = $website->get_status() ? "true" : "false";
сделает его строкой для отображения … но вы не можете проверить против нее истину, поскольку как «истина», так и «ложь» являются действительными строками и дадут вам логическое значение ИСТИНА.
Вы возвращаете логическое значение, которое либо 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; }
Или, если вы хотите сохранить его как возвращаемое Boolean, вы можете использовать очень простую функцию для преобразования его в строку следующим образом:
public function showBool($myBool) { return ($myBool) ? 'True' : 'False'; } $someVar=false; echo showBool($someVar);
В качестве простого упражнения попробуйте выполнить приведенный ниже код и убедитесь сами:
<?php echo true; ?>
То, что вы пытаетесь сделать, это напечатать логическое значение и ожидать строку «true» или «false». Вы могли бы сделать что-то вроде:
$booleanVal? "true":"false";
Избегайте печати true
/ false
. Используйте if-statement, чтобы увидеть, что он действительно возвращает. Что вы ожидаете от $siteUp
для печати?
if($siteUp) { echo "Up"; } else { echo "Down"; }