Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

После идет ключевой момент всей функции: с помощью регулярных выражений мы сначала помещаем в массив $anecdots найденные анекдоты, а в массив $rating - их рейтинг. Рассмотрим, как это делается. 

Заглянув в HTML-код страницы с анекдотами, мы увидим, каким образом они располагаются:

...
<br>
<center><hr width=80%></center> Сам анекдот. 
<br><br> 
Рассказал(а) <a href="mailto:*****@***ru"><b>Имя рассказавшего</b></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Рейтинг: <b>Число</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Оценить: ...

Отсюда мы можем сделать вывод, что интересующие нас данные находятся между выделенными последовательностями символов. Причем мы можем с достаточной долей уверенностью утверждать, что они однозначно определяют необходимую информацию: для тела анекдота таким уникальным указателем является тег <hr...>, а для рейтинга - слово "Рейтинг". Больше таких последовательностей символов в документе не встречается.

Исходя из полученных умозаключений, мы составили регулярные выражения, причем с использованием подшаблонов, заключенных в скобках. Напомню, что функция preg_match_all() помещает строки, соответствующие подшаблонам, в массив с индексом 1, то есть сами анекдоты (без посторонних HTML тегов) будут храниться в массиве $anecdots[1], а  числа-рейтинги - в массиве $rating[1].

Ну, а теперь осталось самое легкое - вывести подходящие условию анекдоты на экран пользователя:

НЕ нашли? Не то? Что вы ищете?

if ($max == 'no') $max = 999; for ($i = 0; $i < sizeof($rating[1]); $i++) { if ((int)$rating[1][$i] >= $min && (int)$rating[1][$i] <= $max) { echo $anecdots[1][$i] . "<br><br>"; echo $rating[0][$i] . "<hr>"; } } }

Если максимум указан как неограниченный, то верхний предел мы устанавливаем невероятно большим. Далее мы просматриваем весь массив с рейтингами, и если его элемент находится в заданном диапазоне, то мы выводим анекдот, соответствующий этому рейтингу, и внизу пишем сам рейтинг, причем используем массив $rating[0], то есть выводим строку, соответствующую всему шаблону поиска рейтинга. Таким образом, у нас выведется не просто цифра, а "Рейтинг: <b>цифра</b>".

И, наконец, нам осталось только грамотно вызвать написанные функции:

if ( isset($min) && isset($max) ) show_anecdots($min, $max); 
  else show_form();
?>

Я хотел дать возможность читателям испытать скрипт в действии, но, к сожалению, хостинг этого сайта не дает возможности обращения к файлам других серверов. Так что пробуйте сами.

До встречи на следующем уроке!

Урок 13. Принципы ООП и классы.

Масса явлений, оставшихся без сознания,
становятся объектами представлений.
Эмиль Дюркгейм

Сегодня мы с вами познакомимся с принципами объектно-ориентированного программирования и их реализацией в PHP.

Многие недолюбливают эту тему и изучают ее поверхностно. Но все же без понимания ООП будет трудно создать что-то существенное, тем более практически все современные языки программирования являются обектно-ориентированными. Тем самым, поняв эту тему однажды, не придется к ней возвращаться, если вы захотите изучить другой язык.

Принципы ООП.

Давайте вдумаемся в эти слова "объектно-ориентированный". Они подразумевают, что какая-то деятельность направлена на определенный объект. Объектами в нашей повседневной жизни выступают все окружающие нас предметы: автомобили, книги, стол, CD, домашние тапочки в конце концов.

Рассмотрим такой объект, как телевизор. Внутри этого объекта находятся множество других объектов: микросхемы, провода, электронно-лучевая трубка и так далее. Но при взаимодействии с телевизором мы об этом даже и не задумываемся. В этом заключается первый принцип ООП - инкапсуляция.

Мы также знаем, что, нажав на определенную кнопку, мы включим телевизор, а удерживая другую - увеличим или уменьшим громкость. При этом от объекта мы получаем только результат его работы, не задумываясь о его внутренних процессах. Это составляет второй принцип - абстракцию.

Наконец, третий принцип, составляющий парадигму ООП, называется наследованием. Он заключается в том, что, например, цветной телевизор произошел от черно-белого, а телевизор с плазменным экраном - от обыкновенного. При этом каждый потомок наследовал свойства и функции предшественника, дополняя их своими, качественно новыми. Наследование позволяет расширить возможности объекта, не создавая при этом новый объект с нуля.

Классы в PHP.

Класс служит шаблоном для объекта. Он создается следующим образом:

class Myclass {
// определение класса
}

Класс может содержать внутри себя собственные определяющие этот класс переменные, называемые свойствами класса. Кроме того, класс, как правило, содержит функции, которые называются методами класса. Для разграничения методов и свойств следует запомнить, что методы ассоциируются с глаголами в нашем обыденном языке, а свойства - с прилагательными или существительными. Тем самым метод всегда подразумевает действие, а свойство - признак объекта.

К примеру, возьмем такой объект, как шариковая ручка. Его свойствами могут являться слова "пластмассовая", "синяя", "новая" и так далее. А методом будет лишь то, что она пишет (конечно, если вы не найдете другой способ ее применения).

Доступ к свойствам и методам класса достигается с помощью указания пути к нему, где первым его элементом является название класса, а вторым - название самого свойства или метода. Элементы пути разделяются знаком ->. Давайте рассмотрим, как это делается:

class Array_class {
var $array = array(); // Определение свойства
function getUniqSum() { // Получает сумму уникальных элементов

return array_sum(array_unique($this->array));

}

function getSortedMerge() { /* Возвращает отсортированный массив из

ключей и элементов массива */

$result = array_merge(array_keys($this->array), array_values($this->array));

sort($result);

return $result;

}
}

Вот мы написали небольшой класс работы с массивами. Он имеет одно свойство - $array. Обратите внимание, как мы прописываем к нему путь: как уже говорилось, первым элементом пути должно быть название класса, но ввиду того, что это свойство и так находится в самом классе, то название меняется на слово this.

Далее мы определяем два метода класса, представляющие собой функции getUniqSum() и getSortedMerge(). Обратите внимание, что свойства классов всегда являются глобальным в пределах этого класса, то есть нам не требовалось в каждой функции писать global $this->array. Также заметьте, где ставится знак $: его место в самом начале описания пути. Причем он ставится даже перед указанием пути к методу класса (то есть фактически к функции).

Теперь создадим новый класс, который будет наследовать все возможности родительского класса.

class Advanced_array extends Array_class {

function advanced_array($size) { /* заполняет массив подряд

идущими числами, чередуя их знаки */

$z = 1;

for ($i = 0; $i < $size; $i++) {

$this->array[$i] = $i *$z;

$z = - $z;

}

}

function getSizeofMerge() { /* возвращает число

неповторяющихся элементов массива, полученного getSortedMerge() */

$merge = $this->getSortedMerge();

return sizeof(array_unique($merge));

}

}

Обратите внимание на функцию с названием самого класса. Это так называемый конструктор класса, который автоматически вызовется при создании экземпляра класса.

Теперь рассмотрим ход работы с полученными классами.

$my = new Array_class;
$my->array = array(1, 2, 6, 1);
echo $my->getUniqSum();
$my = new Advanced_array(4);
echo $my->getSizeofMerge();

Сначала мы создаем новый экземпляр класса Array_class и определяем его свойство array, затем выводим сумму элементов без учета повторяющихся (в нашем примере выведется 9). Далее мы создаем экземпляр класса Advanced_array, который наследует все свойства и методы Array_class.

Обратите внимание, что при создании класса не требуется указывать никаких параметров, но так как у Advanced_array есть конструктор, требующий параметры, то в скобках мы указываем эти данные.

Таким образом не пришлось определять свойство класса Advanced_array, так как за нас это сделал конструктор. Затем мы применяем метод getSizeofMerge(), который сам по себе использует метод родителя getSortedMerge(), и выводим полученные данные.

Использование классов.

По правде говоря, PHP не является в полной мере объектно-ориентированным языком, поэтому очень часто можно обойтись и без использования классов, но иногда они сильно облегчают жизнь.

Но не стоит и злоупотреблять ими, так как неоправданно большое количество используемых классов не только затрудняет понимание кода программы, но нередко приводит к снижению ее производительности.

А на сегодня все. До встречи.

Урок 14. Регулярные заявки.

Этот урок немного не вписывается в логическую цепь наших занятий, а был создан "под давлением общественности", то есть по просьбам читателей, и будет посвящен регулярным выражениям и функциям работы с ними. Наверное, мои расчеты, что статьи Александра Грималовского "Регулярные выражения" будет достаточно для понимания этой темы, оказались неверны.

Итак, надеясь, что вы уже прочитали вышеуказанную статью, начинаем сегодняшний урок.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13