Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
После идет ключевой момент всей функции: с помощью регулярных выражений мы сначала помещаем в массив $anecdots найденные анекдоты, а в массив $rating - их рейтинг. Рассмотрим, как это делается.
Заглянув в HTML-код страницы с анекдотами, мы увидим, каким образом они располагаются:
...
<br>
<center><hr width=80%></center> Сам анекдот.
<br><br>
Рассказал(а) <a href="mailto:*****@***ru"><b>Имя рассказавшего</b></a>
Рейтинг: <b>Число</b>
Оценить: ...
Отсюда мы можем сделать вывод, что интересующие нас данные находятся между выделенными последовательностями символов. Причем мы можем с достаточной долей уверенностью утверждать, что они однозначно определяют необходимую информацию: для тела анекдота таким уникальным указателем является тег <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); |
Я хотел дать возможность читателям испытать скрипт в действии, но, к сожалению, хостинг этого сайта не дает возможности обращения к файлам других серверов. Так что пробуйте сами.
До встречи на следующем уроке!
Урок 13. Принципы ООП и классы.
Масса явлений, оставшихся без сознания,
становятся объектами представлений.
Эмиль Дюркгейм
Сегодня мы с вами познакомимся с принципами объектно-ориентированного программирования и их реализацией в PHP.
Многие недолюбливают эту тему и изучают ее поверхностно. Но все же без понимания ООП будет трудно создать что-то существенное, тем более практически все современные языки программирования являются обектно-ориентированными. Тем самым, поняв эту тему однажды, не придется к ней возвращаться, если вы захотите изучить другой язык.
Принципы ООП.
Давайте вдумаемся в эти слова "объектно-ориентированный". Они подразумевают, что какая-то деятельность направлена на определенный объект. Объектами в нашей повседневной жизни выступают все окружающие нас предметы: автомобили, книги, стол, CD, домашние тапочки в конце концов.
Рассмотрим такой объект, как телевизор. Внутри этого объекта находятся множество других объектов: микросхемы, провода, электронно-лучевая трубка и так далее. Но при взаимодействии с телевизором мы об этом даже и не задумываемся. В этом заключается первый принцип ООП - инкапсуляция.
Мы также знаем, что, нажав на определенную кнопку, мы включим телевизор, а удерживая другую - увеличим или уменьшим громкость. При этом от объекта мы получаем только результат его работы, не задумываясь о его внутренних процессах. Это составляет второй принцип - абстракцию.
Наконец, третий принцип, составляющий парадигму ООП, называется наследованием. Он заключается в том, что, например, цветной телевизор произошел от черно-белого, а телевизор с плазменным экраном - от обыкновенного. При этом каждый потомок наследовал свойства и функции предшественника, дополняя их своими, качественно новыми. Наследование позволяет расширить возможности объекта, не создавая при этом новый объект с нуля.
Классы в PHP.
Класс служит шаблоном для объекта. Он создается следующим образом:
class Myclass { |
Класс может содержать внутри себя собственные определяющие этот класс переменные, называемые свойствами класса. Кроме того, класс, как правило, содержит функции, которые называются методами класса. Для разграничения методов и свойств следует запомнить, что методы ассоциируются с глаголами в нашем обыденном языке, а свойства - с прилагательными или существительными. Тем самым метод всегда подразумевает действие, а свойство - признак объекта.
К примеру, возьмем такой объект, как шариковая ручка. Его свойствами могут являться слова "пластмассовая", "синяя", "новая" и так далее. А методом будет лишь то, что она пишет (конечно, если вы не найдете другой способ ее применения).
Доступ к свойствам и методам класса достигается с помощью указания пути к нему, где первым его элементом является название класса, а вторым - название самого свойства или метода. Элементы пути разделяются знаком ->. Давайте рассмотрим, как это делается:
class Array_class { 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; |
Сначала мы создаем новый экземпляр класса 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 |


