Статьи

Повышение производительности за счет создания вспомогательных функций PHP

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


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

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


Одна из наиболее распространенных повторяющихся задач, которую нам приходится писать, — это гиперссылка. Создавая вспомогательную функцию для этого, мы можем сэкономить время всякий раз, когда нам нужно ее написать, исключить любые шансы на синтаксические ошибки и обеспечить простоту обновления кода, если файлы перемещаются или вы перемещаете сайт на другой домен. Для начала мы сделаем очень простую функцию в файле с именем helpers.php:

1
2
3
4
5
6
7
<?php
function get_domain()
{
    //the variable $domain can be set to the domain your application is running from.
    $domain = «http://www.my-site-domain.com/»;
    return $domain;
}

К этому маленькому ребенку можно обращаться всякий раз, когда нам нужно получить полный путь к файлу, и на него можно ссылаться снова и снова во время разработки вашего сайта. Это более полезный метод, чем простой вызов домена с помощью метода $ _SERVER [‘HTTP_HOST’], потому что он не изменится, если кто-то набрал в домене знак «www» или без него, и будет радостно работать, если ваш сайт включен. субдомен, например «http: // localhost / my-site».

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


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

1
<a href=»http://www.my-site-domain.com/new-page.php» title=»New Page»>New Page</a>

И вот что мы хотели бы на самом деле печатать:

1
echo anchor(‘new-page.php’,’New Page’);

Итак, здесь у нас есть функция PHP, на которую ссылаются две переменные: одна для ссылки и одна для отображаемого текста. Так что теперь, все еще в нашем файле helpers.php, мы можем начать писать новую функцию:

01
02
03
04
05
06
07
08
09
10
11
12
13
function anchor($link, $text) // 1
{
    $domain = get_domain();
    $link = $domain .
     
    $data = ‘<a href=»‘ . $link . ‘»‘;
    $data .= ‘ title=»‘ . $text . ‘»‘;
    $data .= ‘>’;
    $data .= $text;
    $data .= «</a>»;
     
    return $data;
}
  1. Здесь мы устанавливаем функцию «якорь» с двумя переменными.
  2. Затем мы получаем доменное имя из функции get_domain (), которую мы уже создали
  3. Далее мы добавляем переменную $ link, которая была отправлена ​​в функцию.
  4. Затем мы начинаем создавать выходную строку в переменной с именем $ data и используем переменную $ text, чтобы удвоить как видимый текст для сайта, так и тег «title» для ссылки.

Теперь мы можем проверить это. Создайте новый файл index.php в той же папке, что и этот файл helpers.php, и введите:

1
2
require(‘helpers.php’);
echo anchor(‘new-page.php’,’New Page’);

Здесь мы соединили два файла с функцией require (), а затем вызвали функцию anchor (), отправив вместе с ней две пользовательские переменные. Если вы проверите это в браузере, вы увидите желаемый результат:

1
<a href=»http://www.my-site-domain.com/new-page.php» title=»New Page»>New Page</a>

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
function anchor($link, $text, $title) //1
{
    $domain = get_domain();
    $link = $domain .
    $data = ‘<a href=»‘ . $link . ‘»‘;
     
    if ($title) //2
    {
        $data .= ‘ title=»‘ . $title . ‘»‘;
    }
    else
    {
        $data .= ‘ title=»‘ . $text . ‘»‘;
    }
         
    $data.= ‘>’;
     
    $data .= $text;
    $data .= «</a>»;
     
    return $data;
}

Итак, вот модифицированная и улучшенная версия нашей функции anchor ().

  1. Теперь мы добавили третью переменную, $ title.
  2. Затем мы запускаем проверку, чтобы увидеть, был ли введен пользовательский тег заголовка.
  3. Если это так, мы добавляем часть к нашей выходной строке $ data, которая устанавливает тег заголовка 3 .
  4. Если ничего не было введено, тегом заголовка по умолчанию будет отображаемый текст $ text, как это было раньше.

Теперь, если мы изменим наш вызов функции в index.php на:

1
echo anchor(‘new-page.php’,’New Page’,’Custom Title Message!’);

В итоге мы получим этот удовлетворительный результат:

1
<a href=»http://www.my-site-domain.com/new-page.php» title=»Custom Title Message!»>New Page</a>

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function anchor($link, $text, $title, $extras)//1
{
    $domain = get_domain();
    $link = $domain .
    $data = ‘<a href=»‘ . $link . ‘»‘;
     
    if ($title)
    {
        $data .= ‘ title=»‘ . $title . ‘»‘;
    }
    else
    {
        $data .= ‘ title=»‘ . $text . ‘»‘;
    }
     
    if (is_array($extras))//2
    {
        foreach($extras as $rule)//3
        {
            $data .= parse_extras($rule);//4
        }
    }
     
    if (is_string($extras))//5
    {
        $data .= parse_extras($extras);//6
    }
         
    $data.= ‘>’;
     
    $data .= $text;
    $data .= «</a>»;
     
    return $data;
}
  1. Сначала добавим четвертую переменную, называемую «$ extras». Это будет содержать все наши дополнительные пользовательские параметры.
  2. Затем мы проверяем, передаем ли мы массив в этой переменной. Мы будем использовать массив, если передаем функции несколько функций, например, если нам нужно, чтобы у нас был CSS ID и другой класс CSS для нашей ссылки.
  3. Если это массив, мы будем проходить через него и проталкивать каждый элемент через новую функцию parse_extras. Эта функция возьмет, какие дополнительные биты мы ввели, и создаст правильный, соответствующий вывод html.
  4. Если $ extras является строкой, это означает, что мы пропустили только одно правило; поэтому мы можем запустить нашу новую функцию parse_extras () для одного элемента. Полезно, что функция is_string () возвращает FALSE, если переменная пуста; так что с этим фрагментом кода, если ничего не пропущено через $ extras, то никакой код не будет запущен, и он пропустится.
  5. Теперь нам нужно сделать нашу новую функцию parse_extras ():

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function parse_extras($rule)
    {
        if ($rule[0] == «#») //1
        {
            $id = substr($rule,1,strlen($rule));
            $data = ‘ id=»‘ . $id . ‘»‘;
            return $data;
        }
         
        if ($rule[0] == «.») //4
        {
            $class = substr($rule,1,strlen($rule));
            $data = ‘ class=»‘ . $class . ‘»‘;
            return $data;
        }
         
        if ($rule[0] == «_») //5
        {
            $data = ‘ target=»‘ . $rule . ‘»‘;
            return $data;
        }
    }

    Эта функция использует тот факт, что все наши дополнения будут начинаться с уникального идентификатора. Если мы передаем CSS ID, он начинается с хеша (#), если мы передаем CSS-класс, он будет начинаться с точки (.), А если мы передаем цель, он запускается с подчеркиванием (_).

    1. Мы можем проверить, что является первым символом строки, используя синтаксис $ string [0]. Вы можете использовать этот синтаксис для получения первого элемента в массиве, но это также очень полезный и быстрый метод для поиска определенных символов в строках.
    2. Затем мы создаем новую переменную, которая является нашим введенным $ rule, с обрезанным первым символом. Теперь, когда мы определили, для чего предназначено правило, оно нам больше не нужно для вывода html. Эта комбинация substr () и strlen () является полезным фрагментом для вырезания первого символа из строки.
    3. Теперь мы можем создать нашу выходную строку html $ data, готовую к возврату. Теперь этот метод можно повторить — сначала, если $ rule является классом CSS, а затем, если это целевой тег html. Стоит отметить, что нам не нужно обрезать первый символ для целевого тега, поскольку html использует предыдущее подчеркивание (_), в отличие от правил CSS.

    Теперь, когда мы создали все наши необходимые функции, мы можем вернуться в наш файл index.php и изменить наш вызов anchor ().

    1
    echo anchor(‘new-page.php’,’New Page’,’Custom Title Message!’,’#special_link’);

    Здесь мы передаем CSS ID, и мы получаем вывод:

    1
    <a href=»http://www.my-site-domain.com/new-page.php» title=»Custom Title Message!»

    Если бы мы добавили массив дополнений, если вы хотите, чтобы он открывался в новом окне и имел конкретный идентификатор и класс (маловероятно, но стоит продемонстрировать гибкость!), Мы бы сделали это следующим образом:

    1
    2
    $extras = array(‘#special_id’,’.special_class’,’_blank’);
    echo anchor(‘new-page.php’,’New Page’,’Custom Title Message!’,$extras);

    Здесь мы предварительно устанавливаем переменную массива с именем extras, чтобы сохранить код в чистоте, а затем отправляем ее вместе с функцией anchor (). Это даст следующий результат:

    1
    <a href=»http://www.my-site-domain.com/new-page.php» title=»Custom Title Message!»

    Наконец, мы посмотрим, как создавать почтовые ссылки в ваших приложениях. Мы сделаем функцию с именем mailto (), которая будет очень похожа на функцию anchor (), с одним существенным отличием: мы будем реализовывать шифр в выводе html, чтобы адрес электронной почты не мог сканироваться спамом. пауков, и будет держать адреса электронной почты вашего клиента в безопасности.

    Метод, который мы будем использовать, чтобы скрыть адрес электронной почты, использует довольно удивительную PHP-функцию str_rot13 (), которая просто берет строку и перемещает все алфавитные символы на тринадцать букв в алфавите. Если вы когда-нибудь ходили на бойскаутов, вы, наверное, помните, как копались с такими кодами и решили, что, вероятно, станете шпионом, когда вырастете.

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

    Вероятно, стоит упомянуть, что существует много способов скрытия почтовых ссылок, некоторые из которых намного более безопасны, чем другие, а некоторые менее. Мне нравится использовать этот метод, и я никогда не видел, чтобы из-за этого спам доходил ни одному из моих клиентов. Стоит также упомянуть, что сам метод JavaScript был разработан Кристофом Бургдорфером и выглядит так:

    1
    2
    3
    <script type=»text/javascript»>
    document.write(«Njrfbzr frperg fcl pbqr».replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<=»Z»?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));
    </script>

    Это берет искаженную строку «Njrfbzr frperg fcl pbqr» и сдвигает все символы, так что отображение на вашем экране выглядит так:

    1
    Awesome secret spy code

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

    Мы не будем вдаваться в подробности того, как работает этот JavaScript, так как в конце концов это руководство по PHP. Вместо этого мы рассмотрим, как мы можем реализовать это в нашей новой функции mailto ().

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    function mailto($email, $text, $title, $extras) //1
    {
        $link = ‘<a href=\»mailto:’ . $email; //2
        $link = str_rot13($link);
         
        $data = ‘<script type=»text/javascript»>document.write(«‘; //4
        $data .= $link;
        $data .= ‘».replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c<=»Z»?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));
    </script>’;
        $data .= ‘»‘;
         
        if ($title) //6
        {
            $data .= ‘ title=»‘ . $title . ‘»‘;
        }
        else
        {
            $data .= ‘ title=»‘ . $text . ‘»‘;
        }
         
        if (is_array($extras))
        {
            foreach($extras as $rule)
            {
                $data .= parse_extras($rule);
            }
        }
         
        if (is_string($extras))
        {
            $data .= parse_extras($extras);
        }
        $data .= «>»;
         
        $data .= $text;
        $data .= «</a>»;
        return $data;
    }

    Итак, давайте посмотрим, что здесь отличается.

    1. Во-первых, мы все еще передаем через эту функцию четыре переменные, хотя для косметических целей мы переименовали первую переменную в $ email.
    2. Теперь мы создаем новую переменную с выводом html для ссылки mailto. Стоит отметить, что мы добавили обратную косую черту перед кавычками, так как эта строка позже появится внутри функции JavaScript, и мы должны убедиться, что кавычки не перепутают ее.
    3. Далее мы реализуем функцию str_rot13 () для переменной $ link, чтобы она была закодирована.
    4. Затем мы можем создать нашу возвращаемую переменную $ data, которая содержит готовый к выводу JavaScript.
    5. Мы помещаем нашу зашифрованную ссылку в середину всего этого — готовая к переводу.
    6. Теперь, когда JavaScript был добавлен в нашу переменную $ data, остальная часть функции будет выглядеть знакомо.
    7. Мы проверяем, был ли добавлен пользовательский тег title, и затем анализируем наши $ extras, как и прежде. Еще раз, мы закрываем наши теги …
    8. … и вернуть данные.

    Теперь мы можем использовать следующий синтаксис в нашем файле index.php, чтобы вызвать нашу ссылку mailto:

    1
    echo mailto(‘[email protected]’,’Contact Me’);

    Или, если нам нужны пользовательские элементы, как и раньше, мы можем добавить больше переменных:

    1
    2
    $extras = array(‘#special_id’,’.special_class’,’_blank’);
    echo mailto(‘[email protected]’,’Contact me’,’Contact your good pal Barry.’,$extras);

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

    Создание и проверка форм должны быть одной из моих любимых задач при их создании с нуля — здесь много повторяющегося кода, кропотливого написания и шансов на ошибки. Ряд функций, которые выводят правильно структурированные формы и проверяют почтовые данные на наличие действительных адресов электронной почты, паролей, длины строки и т. Д., Могут стать настоящим спасением. Ах, да, создание html-форм с нуля не должно быть столь же достойным стона, как вы думали ранее.

    Если у вас есть какие-либо идеи о том, что было бы полезно увидеть в вспомогательной функции PHP, обязательно прокомментируйте свои идеи!