
Увидев первый раз такой код (например здесь), обычный человек, не сталкивавшийся до этого с ОО-программированием сразу скажет: «Спасибо, нам этого добра не надо. Обойдусь как-нибудь функциями».
Можно долго повторять, что всё новое человек воспринимает с подозрением, что нужно заставить его поверить... Но, вопрос в том, когда стоит использовать классы вместо функций. Ради чего стоит переходить от процедурного подхода к объектно-ориентированному?
1. Сохранение состояния (напр. cookie, referer при HTTP-запросах)
Итак, нужно совершить 2 последовательных HTTP-запроса, сохранив при этом номер последней ошибки (или 0), реферер и кукисы:
$p_content = submit_request("http://www.google.com/advanced_search?hl=ru", "", $last_error, $req_referer, $cookie_ar);
$p_content = submit_request("http://www.google.com/search?hl=ru&as_q=Mr.KTO&num=100", "", $last_error, $req_referer, $cookie_ar);
Здесь производится запрос к гуглу через форму advanced_search (т.к. до недавнего времени нельзя было сразу, без cookie вернуть 100 результатов на страницу). Куки сохраняются в глобальной переменной, массиве $cookie_ar, а функция submit_request принимает этот массив по ссылке:
function submit_request($req_url, $req_POST, &$last_error, &$req_referer, &$cookie_ar) { /*...*/ }
Если для вашей конкретной задачи такой код подходит... – оставьте его! Я серьёзно.
Как только вам понадобится совершить в промежутке между первым и вторым запросом к гуглу, третий запрос (вдруг приспичило проверить PR :)) – то возникнет проблема с корректностью $req_referer (и $cookie_ar, если куки не распределены, как массивы по доменам). Чтобы решить проблему, нам придётся ввести 3 новые глобальные переменные $req_referer_PR, $cookie_ar_PR, $last_error_PR.
Как это будет выглядеть в виде класса:
<?php
class qrl {
//public:
var $last_error = 0;
var $req_referer = "";
var $cookie_ar = array();
function submit_request($req_url, $req_POST = "")
{
/*...*/
}
}
// создаём объекты класса qrl
$req = new qrl; // для гугл-поиска
$PR = new qrl; // для проверки PR
$req->submit_request("http://www.google.com/advanced_search?hl=ru"); //1
echo "PageRank:" . $PR->submit_request("http://toolbarqueries.google.com/search?ch=$hash&q=info:".urlencode($url));
echo "GoogeSearch:" . $req->submit_request("http://www.google.com/search?hl=ru&as_q=Mr.KTO&num=100");
?>
Теперь нам не нужно каждый раз придумывать (и писать) 3 переменных, они все храняться в свойствах класса. К тому же, современные PHP-редакторы поддерживают autocomplete (т.н. Code Insight), достаточно после -> нажать Ctrl+space, чтобы появился список всех публичных свойств и методов класса.
Далее »