Главная - Офис
Проверить наличие функции php. Проверка существования метода в PHP. Проверка существования локального файла
\n";
}
function print_list($vid) {
global $arr; // ссылаемся на внешний массив
?>

Классы могут содержать динамические методы, наличие которых неочевидно внешнему разработчику. Кроме того, в процессе эксплуатации могут создаваться разнородные массивы объектов, которые могут содержать различные методы. Для подобных ситуаций необходимы инструменты проверки существования метода в классе. В качестве такого инструмента в 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_exists

bool function_exists (string function_name)

Ищет функцию с именем f unct i on_name в общем списке определенных в системе функций. Возвращает true, если такая функция найдена, или false, если такой функции нет. При этом речь идет не только о пользовательских функциях, но и о системных, что позволяет эффективно проверять конфигурацию системы и предупреждать пользователя о необходимости перекомпиляции РНР-машины.

Так, приведенный ниже фрагмент проверяет наличие функции imap_open, которая доступна только при компиляции РНР с поддержкой ШАР:
if (function_exists("imap_open")) {
echo "IMAP функции доступны для работы.
\n";
} else {
echo "IMAP функции в PHP-машине отсутствуют.
\n";
}

9.3.2. Список определенных функций:get_defined_functions

array get_defined_functions ()

Функция возвращает многомерный массив, содержащий список всех определенных в системе функций, как встроенных, так и определенных пользователем. При этом встроенные функции помещаются в массив, адресуемый элементом $arr[" internal"],а пользовательские - в массив $аrr["usеr"], как это показано в листинге 9.1.

Рис. 9.3. Получить список всех функций в системе легко и просто.Но разбираться с этим списком вам придется самостоятельно


Листинг 9.1. Список функций, определенных в системе

Список функций, определенных в системеТIТLЕ>


// Функция для вывода одной строки внутренней таблицы
function myrow($data) {
echo "
$data

foreach ($arr[$vid] as $key) {
myrow($key); // Печатаем очередную строку
}
?>

}
$arr = get_defined_f unctions () ;


/tr>
Bcrpoeнныe функции Пользовательские функции





Результат выполнения этой программы приведен на рис. 9.3.

9.4. Регистрация специальных функций

Как правило, PHP-машина самостоятельно обрабатывает нештатные ситуации и состояния, требующие особой реакции. Однако при необходимости вы можете вмешаться в работу внутренних механизмов (см., например, раздел 15.6) включив собственные обработчики некоторых событий. В этом разделе мы рассмотрим, как включить эти обработчик в состав РНР-машины.

Сразу же отмечу, что обработчики включаются не «навсегда», а только на время выполнения текущей программы.

9.4.1 . Функция завершения:register shutdown function

int register_shutdown_f unction (string func)

Регистрирует функцию обработчика, вызываемого при штатном или аварийном завершении текущей PHP-программы. Подробное описание ее практического использования приведено в разделе 15.6.

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

9.4.2. Включение таймера: register_tick_function

void register_tick_function (string func [, mixed arg...])

Функция регистрирует обработчик func, который вызывается каждый тик времени. (Тик представляет собой разновидность «попугаев» и составляет примерно 1/20 секунды.) Этот обработчик используется преимущественно для организации периодического вывода информации о ходе выполнения вычислительного процесса.

9.4.3. Выключение таймера:unregister_tick_f unction

void unregister_tick_function (string func [, mixed arg...])

Эта функция противоположна по своему действию рассмотренной выше и предназначена для отключения обработчика «каждого тика».

 


Читайте:



Расширение pages чем открыть windows

Расширение pages чем открыть windows

1 расширения(ы) и 0 псевдоним(ы) в нашей базе данных Ниже вы можете найти ответы на следующие вопросы: Что такое .pages файл? Какая программа...

Обзор смартфона LG V30 Plus — корейцы смогли Lg v30 какой цвет выбрать

Обзор смартфона LG V30 Plus — корейцы смогли Lg v30 какой цвет выбрать

Технические характеристики Платформа: Android 7.1 с LG UX 6.0+ Сеть: GSM, WCDMA, FDD-LTE (B1, B3, B7, B8, B20 и B38) Дисплей: 6 дюймов,...

Как Связать Ваши Данные из Разных Книг в Excel

Как Связать Ваши Данные из Разных Книг в Excel

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

Учимся пользоваться программой другвокруг Скачать мир вокруг социальная сеть

Учимся пользоваться программой другвокруг Скачать мир вокруг социальная сеть

Сервис ДругВокруг знаком, пожалуй, всем любителям интернет-знакомств, за редким исключением. Он удобен из-за системы поиска людей вблизи...

feed-image RSS