PHP: Советы с функциями

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

Сначала вспомним, как создать обычную функцию:


// функция с двумя необязательными параметрами
function foo($arg1 = '', $arg2 = '') {
    echo "arg1: $arg1\n";
    echo "arg2: $arg2\n";
}

foo('hello','world');
/* выведет:
arg1: hello
arg2: world
*/

foo();
/* выведет:
arg1:
arg2:
*/

Теперь напишем функцию с неограниченным количеством аргументов. Для этого будет использовать метод func_get_args():


// не указываем аргументы
function foo() {

    // возвращает массив, переданных аргументов
    $args = func_get_args();

    foreach ($args as $k => $v) {
        echo "arg".($k+1).": $v\n";
    }
}

foo();
/* ничего не выведет */

foo('hello');
/* выведет
arg1: hello
*/

foo('hello', 'world', 'again');
/* выведет
arg1: hello
arg2: world
arg3: again
*/

Используем Glob() для поиска файлов

Функция позволяет найти необходимый файл по шаблону:


// найти все php файлы
$files = glob('*.php');

print_r($files);
/* выведет:
Array
(
    [0] => phptest.php
    [1] => pi.php
    [2] => post_output.php
    [3] => test.php
)
*/

Для нахождения файлов нескольких типов надо писать так:


// найти все php и txt файлы
$files = glob('*.{php,txt}', GLOB_BRACE);

print_r($files);
/* на выходе:
Array
(
    [0] => phptest.php
    [1] => pi.php
    [2] => post_output.php
    [3] => test.php
    [4] => log.txt
    [5] => test.txt
)
*/

Так же можно в шаблоне указать путь:


$files = glob('../images/a*.jpg');

print_r($files);

/* на выходе:
Array
(
    [0] => ../images/apple.jpg
    [1] => ../images/art.jpg
)
*/

Для того чтобы получить полный путь к документу используйте метод realpath():


$files = glob('../images/a*.jpg');

// Применить функцию 'realpath' к каждому элементу массива
$files = array_map('realpath',$files);

print_r($files);
/* выведет:
Array
(
    [0] => C:\wamp\www\images\apple.jpg
    [1] => C:\wamp\www\images\art.jpg
)
*/

Магические константы

// этот скрипт зависит от текущего расположения файла и
// может вызвать проблемы, если его использовать из разных дирректорий
require_once('config/database.php');

// этот скрипт не вызовет проблем
require_once(dirname(__FILE__) . '/config/database.php');

Используйте __LINE__ при отладке скриптов:

// код
// ...
my_debug("some debug message", __LINE__);
/* выведет
Line 4: some debug message
*/

// ещё код
// ...
my_debug("another debug message", __LINE__);
/* выведет
Line 11: another debug message
*/

function my_debug($msg, $line) {
    echo "Line $line: $msg\n";
}

Генерирование уникальных ID

Если надо сгенерировать уникальную строку, можно использовать функцию md5():

// генерируем случайную строку
echo md5(time() . mt_rand(1,1000000));

Но на самом деле для этих целей в PHP есть специальная функция uniqid():

// генерируем случайную строку
echo uniqid();
/* выведет
4bd67c947233e
*/

// ещё разок
echo uniqid();
/* выведет
4bd67c9472340
*/

Невооружённым взглядом можно заметить, что первые символы мягко говоря схожи… Так происходит из-за того, что данный метод использует время сервера для генерации символов. Это даже полезно, т.к. все сгенерированные значения получаются в алфавитном порядке, что даёт возможность быстро их сортировать.

Для того чтобы уменьшить шансы получения дубликата, мы можем добавить префикс или использовать второй параметр (увеличит количество символов):

// с префиксом
echo uniqid('foo_');
/* выведет
foo_4bd67d6cd8b8f
*/

// со вторым параметром
echo uniqid('',true);
/* выведет
4bd67d6cd8b926.12135106
*/

// оба
echo uniqid('bar_',true);
/* выведет
bar_4bd67da367b650.43684647
*/

Этот метод генерирует строки размером меньше, чем md5, тем самым вы сможете сэкономить место.

Источник: 9 PHP функций, которые нужно знать всем

Реклама