Разделы сайта
Выбор редакции:
- Динамическое изменение размера шрифта на jQuery Задание на работу
- Как пользоваться беспроводной Bluetooth гарнитурой Сколько по времени заряжать беспроводные наушники
- Прошивка Explay N1 (планшет)
- Как полностью удалить программу с компьютера – пошаговая инструкция Где удалять программы
- Как перепрошить «мёртвые» телефоны Nokia с помощью программы Phoenix
- Перенос данных между смартфонами MEIZU
- Microsoft Garage Mouse контролируем два компьютера одной мышью
- Скачать последнюю версию виндовс медиа
- Алексей алексеев добро пожаловать в мой уютненький бложек Создание риб в 1с 8
- «Битрикс24» - что это такое?
Реклама
Проверить наличие функции php. Проверка существования метода в PHP. Проверка существования локального файла |
Классы могут содержать динамические методы, наличие которых неочевидно внешнему разработчику. Кроме того, в процессе эксплуатации могут создаваться разнородные массивы объектов, которые могут содержать различные методы. Для подобных ситуаций необходимы инструменты проверки существования метода в классе. В качестве такого инструмента в PHP выступает функция "method_exists()". Функция в качестве первого параметра принимает имя класса или объект, а в качестве второго имя метода и возвращает "true", если объект или класс имеет данный метод, и "false" в противном случае. Продемонстрируем работу функции "method_exists()" и создадим класс "myExists", который будет содержать два метода, открытый и закрытый. Class myExists { public function method_public() { echo "Открытый метод"; } private function method_private() { echo "Закрытый метод"; } } $_Class_myExists = new myExists(); if(method_exists($_Class_myExists, "method_public")) { echo " Метод "method_public" существует ";
}
if(method_exists($_Class_myExists, "method_private"))
{
echo "Метод "method_private" существует ";
}
if(method_exists($_Class_myExists, "method_protected"))
{
echo "Метод "method_protected" существует ";
}
else
{
echo "Метод "method_protected" не существует ";
}
В примере при помощи функции "method_exists()" в объекте класса "myExists" проверяется наличие существующих методов "method_public()", "method_private()" и не существующего метода "method_protected()". Результат: Метод "method_public" существует Метод "method_private" существует Метод "method_protected" не существует Как видно из результата проверки, функция возвращает "true" для каждого из методов, независимо от его спецификатора доступа, "false" возвращается только в том случае, если объект не обладает ни закрытым, ни открытым методом с таким именем. В качестве первого аргумента функции "method_exists()" используется объект класса "$_Class_myExists", однако для проверки метода вовсе не обязательно создавать объект, достаточно передать имя класса. Пример: Method_exists("myExists", "method_public"); При работе с функцией "method_exists()" следует учитывать, что она не может определить наличие динамических методов, созданных при помощи специального метода "__call()", "__callStatic()". Помимо функции "method_exists()" можно воспользоваться альтернативной функцией "is_callable()", которая в отличие от "method_exists()", кроме проверки метода класса позволяет проверить существование функции, не входящей в состав класса. Работая со сторонним классом, разработчик зачастую не знает досконально всех методов данного класса. Для того чтобы получить их полный список, можно воспользоваться функцией "get_class_methods()". В качестве первого параметра функция принимает имя класса, а возвращает массив его открытых методов. Следует подчеркнуть, что закрытые методы этой функцией не возвращаются. Пример: $_all_pulic_method = get_class_methods($_Class_myExists); echo " "; print_r($_all_pulic_method); echo ""; Результат: Array ( => method_public) Как можно видеть, закрытый метод "method_private()" не включён в результирующий массив. Динамические методы, которые эмулируются при помощи специального метода "__call()", "__callStatic()", также не попадают в список, получаемый при помощи функции "get_class_methods()". Бывают случаи, когда вам необходимо проверить, существует ли указанный файл или нет, например, для того чтобы в последующем совершить с файлом какие-то действия. Я тоже при разработке модуля столкнулся с этим вопросом. И нашел два варианта решения поставленной задачи. Проверка существования файла по URL-ссылкеВ PHP существует функция «fopen », с помощью которой можно открыть указанный URL. Что мы делаем? Пытаемся открыть файл, и если нам это удается, значит, файл существует, а противном же случае – файла нет. Реализация:
А что, если мы имеем не один файл, а несколько, так сказать, массив ссылок? Эта задача как раз и стояла изначально передо мной. И решение уже такой задачи следующее:
В этом случае мы получаем список только тех файлов, которые существуют. Проверка существования локального файлаПод словом «локальный» подразумевается, что скрипт и файлы для проверки находятся на одном сервере. Если у вас довольно большой массив ссылок – этот вариант самый лучший для решения задачи, так как мы делаем не запрос на сторонний сервер, а сканирование указанных директорий. В этом способе используется функция «file_exists», и по аналогии с предыдущим вариантом просто заменяется часть скрипта: И то же самое для массива ссылок:
На что стоит обратить внимание ? На то, что этот способ удобен для прогонки файлов, находящихся в пределах нашей файловой системы. Поэтому все ссылки желательно указывать относительные. Кстати говоря, делая один из заказов, именно этим способом мне удалось просканировать порядка 135 000 файлов всего за пару секунд. В этом разделе мы рассмотрим функции, которые позволяют проверить наличие определения других пользовательских функций. Основное их назначение - реализация контроля конфигурации PHP-машины и внешних библиотек функций. 9.3.1. Наличие определения функции:function_existsbool function_exists (string function_name)Ищет функцию с именем f unct i on_name в общем списке определенных в системе функций. Возвращает true, если такая функция найдена, или false, если такой функции нет. При этом речь идет не только о пользовательских функциях, но и о системных, что позволяет эффективно проверять конфигурацию системы и предупреждать пользователя о необходимости перекомпиляции РНР-машины. Так, приведенный ниже фрагмент проверяет наличие функции imap_open, которая доступна только при компиляции РНР с поддержкой ШАР: 9.3.2. Список определенных функций:get_defined_functionsarray get_defined_functions ()Функция возвращает многомерный массив, содержащий список всех определенных в системе функций, как встроенных, так и определенных пользователем. При этом встроенные функции помещаются в массив, адресуемый элементом $arr[" internal"],а пользовательские - в массив $аrr["usеr"], как это показано в листинге 9.1. Рис. 9.3. Получить список всех функций в системе легко и просто.Но разбираться с этим списком вам придется самостоятельно Листинг 9.1. Список функций, определенных в системе Список функций, определенных в системеТIТLЕ> // Функция для вывода одной строки внутренней таблицы function myrow($data) { echo " $data | } function print_list($vid) { global $arr; // ссылаемся на внешний массив ?> } $arr = get_defined_f unctions () ;
Результат выполнения этой программы приведен на рис. 9.3. 9.4. Регистрация специальных функцийКак правило, PHP-машина самостоятельно обрабатывает нештатные ситуации и состояния, требующие особой реакции. Однако при необходимости вы можете вмешаться в работу внутренних механизмов (см., например, раздел 15.6) включив собственные обработчики некоторых событий. В этом разделе мы рассмотрим, как включить эти обработчик в состав РНР-машины. Сразу же отмечу, что обработчики включаются не «навсегда», а только на время выполнения текущей программы. 9.4.1 . Функция завершения:register shutdown functionint register_shutdown_f unction (string func)Регистрирует функцию обработчика, вызываемого при штатном или аварийном завершении текущей PHP-программы. Подробное описание ее практического использования приведено в разделе 15.6. советПоскольку к моменту вызова функции обработчика соединение с клиентской программой-навигатором (или терминалом) уже разорвано, никакие выходные данные на экран пользователя поступать не будут. Это означает, что вы не можете пользоваться при отладке функции обработчика привычным методом контрольной печати и должны записывать процесс отладки в файл (см., например, раздел 19.3). 9.4.2. Включение таймера: register_tick_functionvoid register_tick_function (string func [, mixed arg...])Функция регистрирует обработчик func, который вызывается каждый тик времени. (Тик представляет собой разновидность «попугаев» и составляет примерно 1/20 секунды.) Этот обработчик используется преимущественно для организации периодического вывода информации о ходе выполнения вычислительного процесса. 9.4.3. Выключение таймера:unregister_tick_f unctionvoid unregister_tick_function (string func [, mixed arg...])Эта функция противоположна по своему действию рассмотренной выше и предназначена для отключения обработчика «каждого тика».
|
Читайте: |
---|
Популярное:
Прошивка TWRP рекавери на Samsung |
Новое
- Как пользоваться беспроводной Bluetooth гарнитурой Сколько по времени заряжать беспроводные наушники
- Прошивка Explay N1 (планшет)
- Как полностью удалить программу с компьютера – пошаговая инструкция Где удалять программы
- Как перепрошить «мёртвые» телефоны Nokia с помощью программы Phoenix
- Перенос данных между смартфонами MEIZU
- Microsoft Garage Mouse контролируем два компьютера одной мышью
- Скачать последнюю версию виндовс медиа
- Алексей алексеев добро пожаловать в мой уютненький бложек Создание риб в 1с 8
- «Битрикс24» - что это такое?
- Описание тонкостей по выводу миниатюры записи wordpress