7 малоизвестных, но очень полезных функций в PHP


Содержание

20 вещей, которые отличают PHP-программиста от обезьянки

PHP — самый популярный язык для написания кода серверной части. Одной и той же цели на нем можно достичь несколькими путями: можно спроектировать красивую и легко поддерживаемую систему, а можно быстро слепить вместе куски кода со Stack Overflow, не забивая себе чересчур голову такими вещами, как правила проектирования и читаемость кода.

Конечно, даже если вы пока еще не гуру разработки, вы все равно захотите писать код, из-за которого окружающим не захочется плакать. Tproger вас выручит — в этой статье собрано 20 советов, каждый из которых поможет вам улучшить читаемость кода и за следование которым вам потом скажут спасибо. А в перспективе прилежное следование этим советам поможет вам стать ближе к статусу опытного и внимательно относящегося к деталям разработчика.

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

Отделяйте файлы с параметрами

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

Комментарии — ваши друзья

Конечно, если вы спешите или набиваете код на волне вдохновения, становится как-то не до комментариев. Но код, написанный давно, понимать трудно — даже если писали его вы. Лучше помогите себе парой комментариев в ключевых местах, чтобы потом сократить время на понимание очередного скрипта.

Правда, просто? Еще стоит обратить внимание на PHPDoc.

Грамотно форматируйте код

Нет ничего хуже огромной стены кода, автор которого явно не знал о существовании кнопки Tab. Не спасут даже комментарии — отступы придумали для того, чтобы логически отделять друг от друга фрагменты кода. А использование или неиспользование отступов много говорит о вас как о программисте. Вот этот код отформатирован неправильно:

А вот это — тот же самый код, но с правильным форматированием:

Если вы хотите точно знать, какой способ форматирования кода правильный — почитайте PSR-ы.

Давайте переменным понятные имена

Конечно, к единому мнению по этому вопросу прийти нельзя. camelCase или under_score? Нужна ли Венгерская нотация? Важно здесь одно: раз и навсегда определитесь, что вам ближе. А даже если вам и захочется изменить стиль, то пожалуйста, не делайте это посреди проекта! Разные варианты именования переменных в одном проекте или, что еще хуже, в одном файле — это ужасно. И никаких магических чисел! Не поленитесь использовать константы.

Инициализируйте переменные

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

Булева переменная ложна, иначе — истинна

Если вы проверяете какое-то условие и потом результат сравнения сохраняете в булевом значении, при инициализации переменной для результата (мы ведь всегда заранее инициализируем переменную, помните?) сначала присваивайте ей false . То есть вот так делать не надо:

Зачем это? Представьте, что вы проверяете данные перед запросом к базе. Если по какой-то причине блок if вдруг не выполнится, то значение переменной останется false — так вы подстрахуете себя от попадания в базу ошибочных данных. В коде порой приходится иметь дело с конфиденциальными данными, так что лучше сначала исходить из того, что все данные ошибочны, пока не доказано обратное. Это правило практически написано кровью.

Кстати, лучше проверять, являются ли данные такими, как надо нам, чем являются ли они такими, как нам не надо.

Используйте кавычки, когда обращаетесь к элементам массива

В коде разных разработчиков можно увидеть два варианта доступа к элементам ассоциативного массива:

Во время выполнения второго варианта PHP сначала попытается найти константу с именем marc . И только если такой не найдется, marc будет сконвертировано в строку и передано в таком виде. Лучше не думать о том, что может случиться, если вдруг такая константа будет существовать… Всегда ставьте кавычки, чтобы такого не происходило.

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

Если вам надо, например, в одном вызове функции обратиться к значению переменной и к строке, лучше используйте запятые, а не точки. Почему? Точка — оператор конкатенации строк, эта операция будет выполняться медленнее. Доказательство.

Еще раз. Так надо:

echo «Hello, my name is «, $name;

А вот так — не надо:

echo «Hello, my name is » . $name;

Пользуйтесь тернарными операторами

Если у вас в коде какое-то очень простое сравнение, желательно использовать тернарный оператор, чтобы не растягивать простой код на несколько строк. Вот так может выглядеть ваш простой if :

Но можно записать его и так:

Обобщенно тернарный оператор работает следующим образом:

Используйте для сравнения с булевыми значениями строгое сравнение

Если вы проверяете переменную на true или false , используйте === , а не == , которое задействуется в остальных сравнениях. Строгое сравнение из трех знаков равенства сравнит еще и типы переменных.

Используйте инкремент и декремент

Если вам нужно просто увеличить или уменьшить на 1 значение переменной, ни к чему писать эту громоздкую конструкцию:

Куда лаконичнее такой вариант:

А главная прелесть этих операций — в том, что одновременно с ними можно выполнять еще какое-нибудь действие (например, if или while ). В зависимости от того, написано ли — или ++ до или после самого названия переменной, очередность операций изменяется.

Используйте сокращенные операторы присваивания

Если переменную надо увеличить или уменьшить на число, не равное 1, то и в этом случае код можно сократить. Например, у вас в коде может быть такое:

А используя сокращенные операторы, этот же код можно будет записать так:

Со строками, кстати, это тоже работает. Если понадобится присоединить к существующей строке какую-то часть, сделайте это так:

Создайте отдельную функцию для var_dump

Иногда бывает нужно во время активной отладки часто выводить прямо на страницу значение какой-то переменной. Конечно, лучше лишний раз так не делать, но если все-таки нужно, то имеет смысл себе помочь. Функция может выглядеть так:

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

Но лучше всего забыть этот совет и научиться пользоваться XDebug.

Пользуйтесь константами

Если у вас есть переменная, значение которой изменять не стоит, имеет смысл использовать вместо нее константу. Константы можно использовать, чтобы хранить в них пути, сообщения об ошибках и так далее. Имя константам стоит давать капсом — так их будет просто отличить, и вы будете уверены, что вызываете то, что нужно.

Пользуйтесь $_GET и $_POST

$_REQUEST лучше не использовать. Четко разделяйте данные: $_GET — это параметры, переданные из адресной строки, $_POST — это, например, полученные из формы данные. И не вздумайте передавать в скрипт пароли, особенно незашифрованные, GET-запросом!

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

Используйте объекты, а не функции

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

Вызывайте методы цепочками

Если вы подряд вызываете несколько методов одного объекта, имеет смысл сократить код, не выписывая каждый раз название этого объекта. Если есть вот такой класс:

… то обращаться к его методам можно так:

Чтобы лучше понять, как это работает и при каких обстоятельствах можно это пользоваться, почитайте статью.

Не повторяйте себя

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

4 октября 2020 – 1 марта 2020, Москва и онлайн, беcплатно

7 малоизвестных, но очень полезных функций в PHP

Объявления скалярных типов введена в двух вариантах: принудительный (по умолчанию) и строгий. Следующие типы могут использоваться для объявления параметров (в обоих вариантах): строки ( string ), целые (int), числа с плавающей точкой ( float ) и логические значения (bool). Они дополняют аргументы других типов, введенных в PHP 5: имена классов, интерфейсов, array и callable .

Цукерберг рекомендует:  Вакансия - Уменьшаются вакансии .Net (С#) ПО-разработчика

// Принудительный режим
function sumOfInts ( int . $ints )
<
return array_sum ( $ints );
>

var_dump ( sumOfInts ( 2 , ‘3’ , 4.1 ));

Результат выполнения данного примера:

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

Подробную документацию и примеры использования читайте в разделе декларация типов.

Объявления возвращаемых значений

В PHP 7 добавлена поддержка объявления возвращаемого типа. Аналогично как и объявления типов аргументов, объявление типа возвращаемого значения указывает, значение какого типа должна вернуть функция. Для объявления типа возвращаемого значения доступны все те же типы, что и для объявления типов аргументов.

function arraysSum (array . $arrays ): array
<
return array_map (function(array $array ): int <
return array_sum ( $array );
>, $arrays );
>

print_r ( arraysSum ([ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]));

Результат выполнения данного примера:

Полную документацию и примеры использования читайте в разделе про объявление возвращаемого типа.

Оператор объединения с null

Был добавлен оператор объединения с null (??), являющийся синтаксическим сахаром для достаточно распространенного действия, когда совместно используются тернарный оператор и функция isset() . Он возвращает первый операнд, если он задан и не равен NULL , а в обратном случае возвращает второй операнд.

// Извлекаем значение $_GET[‘user’], а если оно не задано,
// то возвращаем ‘nobody’
$username = $_GET [ ‘user’ ] ?? ‘nobody’ ;
// Это идентично следующему коду:
$username = isset( $_GET [ ‘user’ ]) ? $_GET [ ‘user’ ] : ‘nobody’ ;

// Данный оператор можно использовать в цепочке.
// В этом примере мы сперва проверяем, задан ли $_GET[‘user’], если нет,
// то проверяем $_POST[‘user’], и если он тоже не задан, то присваеваем ‘nobody’.
$username = $_GET [ ‘user’ ] ?? $_POST [ ‘user’ ] ?? ‘nobody’ ;
?>

Оператор spaceship (космический корабль)

Этот оператор предназначен для сравнения двух выражений. Он возвращает -1, 0 или 1 если $a , соответственно, меньше, равно или больше чем $b . Сравнение производится в соответствии с правилами сравнения типов PHP.

// Целые числа
echo 1 1 ; // 0
echo 1 2 ; // -1
echo 2 1 ; // 1

// Числа с плавающей точкой
echo 1.5 1.5 ; // 0
echo 1.5 2.5 ; // -1
echo 2.5 1.5 ; // 1

// Строки
echo «a» «a» ; // 0
echo «a» «b» ; // -1
echo «b» «a» ; // 1
?>

Определение констант массивов с помощью define()

Можно определить константу типа array с помощью функции define() . В PHP 5.6 такие константы можно было задавать только с помощью const.

echo ANIMALS [ 1 ]; // выводит «cat»
?>

Анонимные классы

Была добавлена поддержка анонимных классов с помощью new class. Их можно использовать тогда, когда нужен одноразовый класс и создавать полноценный класс, а потом его объект не имеет смысла:

interface Logger <
public function log ( string $msg );
>

class Application <
private $logger ;

public function getLogger (): Logger <
return $this -> logger ;
>

public function setLogger ( Logger $logger ) <
$this -> logger = $logger ;
>
>

$app = new Application ;
$app -> setLogger (new class implements Logger <
public function log ( string $msg ) <
echo $msg ;
>
>);

var_dump ( $app -> getLogger ());
?>

Результат выполнения данного примера:

Подробную документацию и примеры использования читайте в разделе про анонимные классы.

Синтаксис кодирования Unicode

Он принимает шестнадцатеричный код Unicode и записываем его в формате UTF-8 в двойных кавычках или формате heredoc. Любой корректный код будет принят. Ведущие нули по желанию.

Результат выполнения данного примера:

Closure::call()

Closure::call() является более производительным и коротким способом временного связывания области действия объекта с замыканием и его вызовом.

// До PHP 7
$getX = function() x ;>;
$getXCB = $getX -> bindTo (new A , ‘A’ ); // промежуточное замыкание
echo $getXCB ();

// PHP 7+
$getX = function() x ;>;
echo $getX -> call (new A );

Результат выполнения данного примера:

unserialize() с фильтрацией

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

// Преобразование всех объектов в __PHP_Incomplete_Class
$data = unserialize ( $foo , [ «allowed_classes» => false ]);

// Преобразование всех объектов, кроме MyClass и MyClass2 в __PHP_Incomplete_Class
$data = unserialize ( $foo , [ «allowed_classes» => [ «MyClass» , «MyClass2» ]]);

// Поведение по умолчанию принимает все классы (можно просто не задавать второй аргумент)
$data = unserialize ( $foo , [ «allowed_classes» => true ]);

IntlChar


Новый класс IntlChar добавляет новую функциональность в ICU. Класс определяет несколько статических методов и констант для манипулирования символами Unicode.

Результат выполнения данного примера:

Для использования это класса необходимо установить расширение Intl.

Ожидания

Ожидания являются улучшенной, обратно совместимой версией старой функции assert() . Они позволяют делать предположения с нулевой стоимостью в промышленном коде и предоставляют возможность выбрасывать пользовательские исключения в случае провала ожидания.

Вместе тем, что старое API поддерживается, assert() теперь является языковой конструкцией, принимающей первым аргументом выражения, а не только строки для оценки или логические значения для проверки.

class CustomError extends AssertionError <>

assert ( false , new CustomError ( ‘Сообщение об ошибке’ ));
?>

Результат выполнения данного примера:

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

Групповые объявления use

Классы, функции и константы импортируемые из одного и того же namespace, теперь можно группировать в одном операторе use.

// До PHP 7
use some \namespace\ ClassA ;
use some \namespace\ ClassB ;
use some \namespace\ ClassC as C ;

use function some \namespace\ fn_a ;
use function some \namespace\ fn_b ;
use function some \namespace\ fn_c ;

use const some \namespace\ ConstA ;
use const some \namespace\ ConstB ;
use const some \namespace\ ConstC ;

Выражение return в генераторах

Эта функциональность добавлена к генераторам, введенным в PHP 5.5. Она позволяет использовать оператор return в генераторах в качестве окончательного возвращаемого значения (возврат по ссылке недопустим). Это значение можно извлечь с помощью нового метода Generator::getReturn(), который можно использовать только после того, как генератор вернул все сгенерированные значение.

= (function() <
yield 1 ;
yield 2 ;

foreach ( $gen as $val ) <
echo $val , PHP_EOL ;
>

echo $gen -> getReturn (), PHP_EOL ;

Результат выполнения данного примера:

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

Делегация генератора

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

function gen ()
<
yield 1 ;
yield 2 ;
yield from gen2 ();
>

function gen2 ()
<
yield 3 ;
yield 4 ;
>

foreach ( gen () as $val )
<
echo $val , PHP_EOL ;
>
?>

Результат выполнения данного примера:

Функция целочисленного деления intdiv()

Новая функция intdiv() производит целочисленное деление операндов и возвращает его результат.

Результат выполнения данного примера:

Опции сессий

Теперь session_start() принимает массив опций, которые переопределят конфигурационные директивы сессии установленные в php.ini.

Также опции были расширены включенной по умолчанию опцией session.lazy_write, которая говорит PHP о том, что файл сессии надо перезаписывать, только если изменились данные сессии, и опцией read_and_close, которую можно задать только через session_start() для того, чтобы PHP закрывал сессию сразу же как прочитает ее данные и не вносил в нее каких либо изменений.

К примеру, для установки session.cache_limiter равным private и немедленному закрытию сессии после чтения ее данных:

preg_replace_callback_array()

Новая функция preg_replace_callback_array() позволяет писать более чистый код, когда требуется использовать функцию preg_replace_callback() . До PHP 7 при необходимости обработать разные регулярные выражения разными функциями приходилось для каждой такой обработки писать отдельный вызов функции.

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

Функции CSPRNG

Были добавлены две новые кроссплатформенные функции для генерации криптографически безопасных строк и целых чисел: random_bytes() и random_int() .

Теперь функция list() всегда может распаковывать объекты, реализующие ArrayAccess

Ранее функция list() не гарантировала корректную обработку объектов, реализующих ArrayAccess. Теперь это исправлено.

Супер полезные функции PHP, 10 фрагментов

↓ Также Вам будет интересно ↓

При работе с PHP программированием, очень полезно иметь на вооружении полезные функции php или фрагменты кода, которые могут сэкономить много времени при их необходимости. Сегодня я собираюсь показать вам 10 супер полезных фрагментов кода, которые Вы, вероятно, никогда не слышали. Можете пополнить свой список этими полезными кодами.

Обмен текстовыми сообщениями с использованием TextMagic API

Если по какой-то причине, Вам необходимо отправлять текстовые сообщения на телефоны своих клиентов, то Вы можете использовать сервис TextMagic. Простой API, который позволяет Вам отправлять SMS на мобильные телефоны. Обратите внимание, что TextMagic услуга не бесплатная.

Пример кода ниже показывает, как легко можно отправить SMS на мобильный телефон с помощью TextMagic API:

7 малоизвестных, но очень полезных функций в PHP

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

Использующие только функции:

Скажу сразу, что необходимость использования такой библиотеки в реальной работе возникает практически сразу. Те, кто не знает про них, постоянно пишут велосипеды. Ещё не так давно программисты в PHP создавали файлики с полезными функциями и таскали их из одного проекта в другой. Хорошо, что эти времена уже прошли и можно не тратить время на то, что уже делалось тысячу раз до нас. Однако, мы не сможем разобрать все возможные функции в рамках наших курсов. Кое-что рассмотрим, но в дальнейшем не забывайте периодически просматривать их на наличие чего-либо полезного.

Обратите внимание на документацию указанных библиотек. Зачастую они повторяют те функции, которые уже встроены в сам язык. Делается это по разным причинам. Вот некоторые из них:

  1. Консистентность (согласованность). Функции делают для того, чтобы библиотека была полной.
  2. Исправление ошибок PHP. Некоторые функции в PHP по историческим причинам иногда ведут себя неверно.
  3. Улучшение. Другой порядок аргументов, расширенные возможности, убранные ограничения или просто понятное имя.

Итак, поехали. Библиотека Funct.

Collections

Такая простая и нужная функция почему-то отсутствует в самом PHP.

Принимает на вход массив и возвращает новый массив, в котором отсутствует первый элемент исходного.

Полезные функции php которые могут пригодится

Есть у меня заметка о полезных командах в терминале Linux, вот решил завести еще заметку о полезных функций php, буду ее постоянно пополнять.

Вот так можно вычислить разницу во времени, а именно сколько дней, часов, минут, секунд между двух промежутками времени и вывести в удобном формате.
На выводе мы получим 02:58:00, если в формате вывода указать %i то получим минуты без ведущего нуля.

Цукерберг рекомендует:  Выпадающее меню на CSS3

Перевести секунды в часы минуты секунды можно при помощи gmdate
На выходе получим 00:16:39

Если нам нужно сохранить полученные данные для дальнейшего импорта можно использовать функцию var_export, допустим у нас есть массив $country, записать его в файл можно следующим образом
Для использования подключаем файл require или include и пользуемся $country.

Можно еще так
Тогда при подключении сразу будет возвращен массив.

Так же можно использовать serialize и unserialize
Записать данные в файл
Получить
Сортировка массива по значениям ключей
php 7.1
php 5.6

Перевод строчного времени 14 января 2020 или 14 янв 2020 если убрать пробелы 14января2020 то работать тоже будет в Unix Time при помощи ICU
Сделать из многомерного массива одномерный в одну строку
Поиск в многомерном массиве
Но имейте ввиду: array_column создаст новый массив из ключей column и если у вас заданные ключи, то данный метод может вам вернет не то что вы ожидаете.

Получить множественные вхождения needle в многомерном массиве, просто меняем местами параметры
Провел пару тестов, все равно самый быстрый поиск в многомерном массиве из 10к элементов это foreach, так же пробовал array_column выносить в отдельну переменную скорости это не прибавляет
Результаты тестов
php 7.1
php 7.2
php 5.6
Для больших массивов используйте foreach

7 малоизвестных, но крутых инструментов для повышения продуктивности

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

Приложений, направленных на повышение продуктивности, очень много. Некоторые из них у всех на слуху: «Google Календарь» для встреч, Slack и Trello для совместной работы, Evernote для заметок и Wunderlist для списков дел. Но есть и менее именитые приложения, которые помогут вам разобраться с делами и сосредоточиться.

1. Sunsama

Sunsama позиционирует себя как инструмент для командной работы, но это ещё и фантастически удобное приложение для отдельных пользователей. Оно может отображать ваши текущие задачи в форме календаря или канбан-карточек.

Подключите свой «Google Календарь» или даже несколько, и все задачи, отмеченные там, окажутся в Sunsama. Возможен экспорт ваших проектов в Trello, интеграция со Slack и чат для командной работы.

2. Pomotroid

Наверняка вы слышали о технике Pomodoro, которая позволяет эффективно чередовать периоды работы и отдыха. Принцип очень прост: 25 минут работаем, 5 минут отдыхаем. Так проще концентрироваться на текущих задачах и не уставать.

Pomotroid поможет вам использовать эту технику без каких-либо усилий. И это, пожалуй, лучшее из всех десктопных Pomodoro-приложений. Оно абсолютно бесплатное и имеет приятный минималистичный дизайн. Кнопка воспроизведения/паузы запускает и останавливает таймер, красный цвет указывает время работы, зелёный — короткий перерыв, а синий — длительный.

Продолжительность временных отрезков настраивается, поэтому если стандартная Pomodoro-техника кажется вам неудобной, вы можете легко изменить её. Приложение доступно для Windows, macOS и Linux.

3. Pomocado

Pomocado работает прямо в вашем браузере и использует ту же технику Pomodoro, что и Pomotroid. Но ещё этот сервис позволяет отслеживать, насколько эффективно вы тратите своё рабочее время.

Зарегистрируйтесь в Pomocado, откройте веб-приложение и запустите Pomodoro-таймер, начав работать. При запуске таймера сервис отмечает периоды вашей активности и отдыха на специальном графике. Затем вы сможете взглянуть на него и оценить, как вы распоряжаетесь своим временем.

И помните: чем дольше вы используете Pomocado, тем лучшее представление об организации вашего времени даёт график.

4. Orrange New Tab

Очень полезное и удобное расширение для Google Chrome, с которым вы сможете использовать вашу стартовую страницу по максимуму. Orrange New Tab собирает на ней все ваши задачи, электронную почту и другие вещи, требующие вашего внимания.

Можно подключить к расширению различные сервисы, например Gmail, «Google Календарь», Todoist, Wunderlist, Trello, Asana, GitHub и Pocket, а также настроить, в какой из них будут добавляться создаваемые пункты-задачи.

Также Orrange New Tab отображает на стартовой странице часы, погоду и красивые автоматически обновляемые фоны.

Эксперты рассказали о 7 малоизвестных, но полезных функций смартфонов

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

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

Чтобы избавиться от навязчивой рекламы в приложениях, эксперты также советуют прибегать к включению авиарежима. Кроме того, владельцы гаджетов на операционной системе Android могут загрузить нужную страницу с текстом книги или новости, для того, чтобы прочитать его позднее даже там, где плохое покрытие сотовой связи.

Для того чтобы использовать свой смартфон, как персональный компьютер, можно подключить к нему мышь Air Mouse Pro для iOS и Remote Mouse для Android. Если вам нужно измерить, насколько какая-либо поверхность является ровной, вам нужно скачать программу для гаджета, которая способна стать на время строительным уровнем.

Еще эксперты рассказали про инженерные коды, самым полезным из которых можно считать комбинацию *3370#, которая усилит качество приема сигнала в смартфоне, но нужно понимать, что в этот момент расход заряда батареи будет сильнее. Для отключения усиления сигнала нужно набрать комбинацию #3370#.

Ранее ученые рассказали о негативном влиянии на человека от постоянных уведомлений.

Как использовать оператор use и функцию целочисленного деления в PHP 7

В этой мы статье расскажем об операторе PHP use , а также о новой функции целочисленного деления.

Оператор «use»

В PHP 5.x , если нужно импортировать классы, функции и константы из пространства имен, необходимо использовать use несколько раз.

В PHP 7 это можно сделать, используя оператор use только один раз. В приведенном ниже примере мы сгруппировали классы, функции и константы, которые принадлежат к одному пространству имен, и поместили их в фигурные скобки, каждый из этих элементов разделен запятой:

Предназначение use

Основное предназначение использования PHP namespace use — помочь компилятору PHP определить, какой класс выполнять. Представим ситуацию, когда у нас есть два класса с одинаковым именем. Это может произойти, когда мы работаем с огромным структурным приложением MVC . Если у нас есть два класса с одинаковым именем, то нужно поместить их в различные пространства имен.

Предположим, что автозагрузчик загружает оба класса, и нам нужно создать объект одного класса. В этом случае компилятор не сможет определить, какой из двух классов с одинаковым именем загружать. Но можно использовать оператор use ООП PHP , чтобы помочь компилятору определить, какой класс загружать.

Пространство имен

  • Внутри пространства имен может содержаться любой код PHP . Если он предназначен для классов, интерфейсов, функций и констант, тогда код зависит от пространства имен;
  • Пространство имен всегда объявляется с помощью namespace. Если мы объявляем пространство имен в скрипте, то это объявление всегда должно размещаться в его начале. То есть выше всего остального PHP-кода , кроме declare ;
  • Можно определить одно пространство имен в нескольких файлах. Это позволяет распределить содержимое пространства имен в файловой системе;
  • На пространство имен можно ссылаться, используя полное имя с псевдонимом, это также называется импортированием. Что эквивалентно функции создания символьных ссылок на директории или файлы в системах на основе UNIX ;
  • Всеми версиями PHP поддерживаются три вида alias или импортирования. Псевдоним имени класса, псевдоним имени интерфейса и псевдоним имени пространства имен. Но версии PHP 5.6+ и 7 поддерживают aliasing или импортирование имен функций и констант;
  • use PHP как использовать: глобально или внутри объявления пространства имен. Глобальное объявление необходимо, так как импортирование производится во время компиляции, а не во время исполнения. Следовательно, оно не может быть заблокировано или ограничено локально;
  • Ниже приведен пример использования пространства имен в коде РНР :

Объяснение кода PHP

  • Пространство имен объявляется в верхней части кода PHP ;
  • В том же файле мы объявляем константу, класс и функцию;
  • Мы можем импортировать эти элементы в другой файл с помощью оператора use ООП PHP .

Целочисленное деление

В PHP 7 была введена новая функция, которая выполняет целочисленное деление на значения, передаваемые в качестве аргументов, и возвращает результат деления в виде int ( только целую часть ).

Первый параметр является числителем, а второй параметр — делителем. Ниже приведен пример, который демонстрирует работу этой функции:

Объяснение кода PHP 7

  • Мы объявляем переменную $result , которая принимает результат функции intdiv ( 110, 30 ). Она принимает два параметра: первый параметр — числитель ( 110 ), а второй параметр – делитель ( 30 );
  • Если мы выполним простое арифметическое действие, то получим 3,666 ( округленное значение ). Но поскольку это целочисленное деление, функция возвратит только 3 , отбросив все значения после запятой;
  • Затем мы использовали функцию var_dump() , которая возвращает информацию о переменной. В нашем случае вы увидите тип данных переменной $result — Int , так как эта переменная содержит значение, возвращаемое функцией целочисленного деления;
  • Мы выводим значение, содержащееся в переменной $result — целая часть от результата деления 110 на 30 .

Результат

Когда мы выполним эту программу в PHP 7 , на экран будет выведен тип данных переменной $result — int , и значение 3 :

Исходный код оператора и функции целочисленного деления

Заключение

В этой статье был рассмотрен оператор PHP use и применение новой функции целочисленного деления, которая была добавлена в PHP 7 .

Данная публикация представляет собой перевод статьи « Learn How to Use Statement and Integer Division in PHP 7 » , подготовленной дружной командой проекта Интернет-технологии.ру

7 малоизвестных, но очень полезных функций в PHP

Каждый веб-разработчик хранит полезные фрагменты кода в своей личной библиотеке, чтобы не «изобретать велосипед» каждый раз заново. В данной статье собраны наиболее интересные и полезные фрагменты PHP-кода, которые я добавил к своей личной библиотеке за последние 3 месяца.

Конвертация PDF-файлов в JPG с помощью PHP и Image Magick

Этот простой фрагмент PHP-кода конвертирует PDF-файл в изображение JPG. Это очень полезно, если вам нужно создать изображение для предварительного просмотра ваших файлов в формате PDF. Пожалуйста, обратите внимание, что у вас должно быть установлено расширение Image Magick на вашем сервере, чтобы использовать этот код.

$pdf_file = ‘./pdf/demo.pdf’ ;
$save_to = ‘./jpg/demo.jpg’ ; //Убедитесь, что Apache имеет разрешения на запись в эту папку! (частая проблема)

//выполните ImageMagick коммандой ‘convert’ и конвертируйте PDF в JPG с указанными настройками
exec ( ‘convert «‘ . $pdf_file . ‘» -colorspace RGB -resize 800 «‘ . $save_to . ‘»‘ , $output , $return_var ) ;
if ( $return_var == 0 ) <
//если конвертация прошла успешно
print «Conversion OK» ;
>
else print «Ошибка конвертации.
» . $output ;

Проверка записываемой информации в базу данных

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

function cleanInput ( $input ) <

$search = array (
‘@@si’ , // Удаляем javascript
‘@ ]*?>@si’ , // Удаляем HTML теги
‘@@siU’ , // Удаляем теги style
‘@ @’ // Удаляем многострочные комментарии
) ;

$output = preg_replace ( $search , » , $input ) ;
return $output ;
>

function sanitize ( $input ) <
if ( is_array ( $input ) ) <
foreach ( $input as $var => $val ) <
$output [ $var ] = sanitize ( $val ) ;
>
>
else <
if ( get_magic_quotes_gpc ( ) ) <
$input = stripslashes ( $input ) ;
>
$input = cleanInput ( $input ) ;
$output = mysql_real_escape_string ( $input ) ;
>
return $output ;
>

// Использование:
$bad_string = «Привет! Какой хороший сегодня день!» ;
$good_string = sanitize ( $bad_string ) ;
// $good_string вернет «Привет! Какой хороший сегодня день!»

// Также используйте для проверки POST/GET данных
$_POST = sanitize ( $_POST ) ;
$_GET = sanitize ( $_GET ) ;

Создание data URI изображения при помощи PHP

Вместо предоставления традиционного адреса изображения, вы можете использовать данные изображения в кодировке base64 и добавить их в атрибут src. Это экономит сетевые запросы для каждого изображения, и предотвращает попытки несанкционированного доступа к каталогам с изображениями. Обратите внимание, что в IE7 и ниже, это работать не будет.

// имя изображения
$image = ‘cricci.jpg’ ;

// кодируем изображение в base64
$imageData = base64_encode ( file_get_contents ( $image ) ) ;

// формат пути к изображению: data:;base64,;
$src = ‘data: ‘ . mime_content_type ( $image ) . ‘;base64,’ . $imageData ;

//Вывод изображения
echo ‘ , $src , ‘»>’ ;

Создание CSV-файла из массива PHP

Это простая, но эффективная функция для генерации CSV-файла из массива PHP. Функция принимает 3 параметра: данные, разделители полей CSV (по умолчанию это запятая) и ограничители полей CSV (по умолчанию — двойные кавычки).

Разархивирование файлов при помощи PHP

Эта функция принимает два параметра: zip-архив и папку, в которую нужно архив распаковать.

Определить местонахождение по IP

Этот полезный фрагмент кода поможет вам определить местоположения конкретного IP. Функция принимает один IP в качестве параметра, и возвращает местоположение. Если местоположение не найдено, возвращается UNKNOWN.

function detect_city ( $ip ) <

if ( ! is_string ( $ip ) || strlen ( $ip ) 1 || $ip == ‘127.0.0.1’ || $ip == ‘localhost’ )
$ip = ‘8.8.8.8’ ;

$curlopt_useragent = ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)’ ;

$url = ‘http://ipinfodb.com/ip_locator.php?ip=’ . urlencode ( $ip ) ;
$ch = curl_init ( ) ;

$curl_opt = array (
CURLOPT_FOLLOWLOCATION => 1 ,
CURLOPT_HEADER => 0 ,
CURLOPT_RETURNTRANSFER => 1 ,
CURLOPT_USERAGENT => $curlopt_useragent ,
CURLOPT_URL => $url ,
CURLOPT_TIMEOUT => 1 ,
CURLOPT_REFERER => ‘http://’ . a > $_SERVER [ ‘HTTP_HOST’ ] ,
) ;

if ( preg_match ( ‘<

  • City : ([^ , $content , $regs ) ) <
    $city = $regs [ 1 ] ;
    >
    if ( preg_match ( ‘<
  • State/Province : ([^ , $content , $regs ) ) <
    $state = $regs [ 1 ] ;
    >

    if ( $city != » & amp ;& amp ; $state != » ) <
    $location = $city . ‘, ‘ . $state ;
    return $location ;
    > else <
    return $default ;
    >

    Отсылаем логи ошибок себе на email

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

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

    Ошибка ( $number ) произошла в строке
    $line в файле: $file .

    $headers = ‘Content-type: text/html; charset=UTF-8’ . » \r \n » ;

    // Кому отсылаем email.
    error_log ( $email , 1 , span >= «cloak001f648d3a5a2d08840cfb1e2039a8ba» > Этот адрес электронной почты защищён от спам — ботов . У вас должен быть включен JavaScript для просмотра . span > script type = ‘text/javascript’ >
    document . getElementBy >( ‘cloak001f648d3a5a2d08840cfb1e2039a8ba’ ) . innerHTML = » ;
    var prefix = ‘ma’ + ‘il’ + ‘to’ ;
    var path = ‘hr’ + ‘ef’ + ‘=’ ;
    var addy001f648d3a5a2d08840cfb1e2039a8ba = »you’ + ‘@’ ;
    addy001f648d3a5a2d08840cfb1e2039a8ba = addy001f648d3a5a2d08840cfb1e2039a8ba + ‘youremail’ + ‘.’ + ‘com’ ;
    var addy_text001f648d3a5a2d08840cfb1e2039a8ba = »you’ + ‘@’ + ‘youremail’ + ‘.’ + ‘com’ ; document . getElementBy >( ‘cloak001f648d3a5a2d08840cfb1e2039a8ba’ ) . innerHTML += ‘ + path + ‘\» + prefix + ‘:’ + addy001f648d3a5a2d08840cfb1e2039a8ba + ‘\’>’ + addy_text001f648d3a5a2d08840cfb1e2039a8ba + ‘ ‘ ;
    ‘, $headers);

    // Определитесь как реагировать на ошибки (на стороне пользователя)
    // Либо это сообщение об ошибке, или завершить работу скрипта .
    // Этот код прекращает работу скрипта, если ошибка была более чем просто уведомление.
    if ( ($number !== E_NOTICE) && ($number nettuts_error_handler ‘);

    // Trigger an error. (var doesn’ t exist )
    echo $somevarthatdoesnotexist ;

    Удаляем HTML-теги добавленные Microsoft Word

    Если вы работаете с визуальными редакторами, то, я думаю, вы уже имели множество проблем при вставке текста напрямую из Microsoft Word, это приводит к плохой разметки и различных проблем в коде.

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

    function cleanHTML ( $html ) <
    $html = ereg_replace ( » ]*>» , «» , $html ) ;

    $html = ereg_replace ( » ]*)( > [ ^ «]*» | ‘[^’ ] * ‘|[^>]+)([^>]*)>»,» «,$html);
    $html = ereg_replace(» ]*)( |’ [ ^ ‘]*’ | [ ^ > ] + ) ( [ ^ > ] * ) > «,» \ 1 > «, $html );

    Автоматическое добавление водяных знаков на изображение

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

    function watermarkImage ( $SourceFile , $WaterMarkText , $DestinationFile ) <
    list ( $width , $height ) = getimagesize ( $SourceFile ) ;
    $image_p = imagecreatetruecolor ( $width , $height ) ;
    $image = imagecreatefromjpeg ( $SourceFile ) ;
    imagecopyresampled ( $image_p , $image , 0 , 0 , 0 , 0 , $width , $height , $width , $height ) ;
    $black = imagecolorallocate ( $image_p , 0 , 0 , 0 ) ;
    $font = ‘arial.ttf’ ;
    $font_size = 10 ;
    imagettftext ( $image_p , $font_size , 0 , 10 , 20 , $black , $font , $WaterMarkText ) ;
    if ( $DestinationFile <> » ) <
    imagejpeg ( $image_p , $DestinationFile , 100 ) ;
    > else <
    header ( ‘Content-Type: image/jpeg’ ) ;
    imagejpeg ( $image_p , null , 100 ) ;
    >
    imagedestroy ( $image ) ;
    imagedestroy ( $image_p ) ;
    >

    /******** использование **********/
    $SourceFile = ‘/home/user/www/images/image1.jpg’ ;
    $DestinationFile = ‘/home/user/www/images/image1-watermark.jpg’ ;
    $WaterMarkText = ‘Ваш копирайт’ ;
    watermarkImage ( $SourceFile , $WaterMarkText , $DestinationFile ) ;

    Автоматическое добавление ссылки для email-адресов

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

    $stringa = «This should format my email address cloakaaf64c54702bbd3a52ac8330b0161d5e «>Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. » ;

    $pattern = «/([a-z0-9][_a-z0-9.-]+@([0-9a-z][_0-9a-z-]+\.)+[a-z]<2,6>)/i» ;
    $replace = » \\ 1″ ;
    $text = preg_replace ( $pattern , $replace , $stringa ) ;
    echo htmlspecialchars ( $text ) ;

    Если у Вас возникли вопросы, то для скорейшего получения ответа рекомендуем воспользоваться нашим форумом

    7 малоизвестных, но очень полезных функций в PHP

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

    • Итерируемый псевдотип
    • Замыкания через функции обратного вызова
    • Синтаксис с квадратными скобками для списка ()
    • Поддержка ключей в списке
    • Видимость констант класса
    • Типы, допускающие значение null
    • Функции типа void
    • Захват исключений разных типов
    • Исключение «Слишком мало аргументов»

    Для вашего удобства по ходу статьи я также буду ссылаться на соответствующие RFC.

    Перед тем как мы начнем: А вы хотели бы попробовать PHP 7.1, не устраивая бардак с вашей текущей средой программирования? Тогда Docker – это ваш лучший друг! PHP 7.1 можно запросто настроить при помощи Docker, используя одно из этих образов.

    Чтобы запустить контейнер 7.1:

    Это позволит загрузить (если на вашем локальном устройстве уже не сохранены подобные файлы) образы Docker для php:7.1-rc , после чего запустите контейнер и зайдите в него, используя всплывающие подсказки. Перенесите карты опций -v /Users/apple/Workplace/php/:/php из директории /Users/apple/Workplace/php центрального компьютера в директорию /php внутри контейнера Docker. Таким образом, все файлы внутри /Users/apple/Workplace/php будут доступны в директории контейнера /php .
    Теперь заходим в директорию /php .

    Супер! Теперь мы готовы опробовать новые функции PHP 7.1.

    1. Итерируемый псевдотип

    Предположим, у нас есть функция getUserNames , которая принимает перечень пользователей и возвращает их имена в виде списка.

    Примечание: Здесь мы используем библиотеку nikic/iter.

    Параметр $users может быть представлен массивом или объектом с реализацией функции Traversable . До выхода PHP 7 было невозможно задать для данной функции какие-либо подсказки относительно типа, поскольку не существовало общего типа, который одновременно соответствовал бы и массиву и объекту Traversable .

    Для решения данной проблемы в PHP 7.1 был реализован новый псевдотип iterable , который мы можем использовать для того, что задать значения типа для всего, что может быть итерировано с использованием foreach .

    Теперь данная функция может принимать массивы, итерируемые объекты и генераторы.

    2. Замыкания через функции обратного вызова

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

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

    Улучшенный механизм исправления ошибок – При работе с Closure::fromCallable ошибки отображаются в нужном месте, а не там, где мы используем вызываемую функцию. Это значительно упрощает процесс исправления багов.

    Перенос объемов – Пример выше будет нормально работать, даже если callback – это частный/защищенный (private/protected) метод MyClass .

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

    3. Синтаксис с квадратными скобками для списка ()

    Синтаксис коротких массивов был одной из потрясающих функций, добавленных в PHP 5.4, что сделало работу с массивами намного проще и удобнее. Теперь синтаксис краткого перечня позволяет нам использовать квадратные скобки вместо list() для присвоения массиву переменных.

    4. Поддержка ключей в списке

    До выхода PHP7 функция list() поддерживала только проиндексированные числами массивы, индекс которых начинается с нуля. Мы не могли использовать данную функцию с ассоциативными массивами.

    Теперь новый функционал позволяет нам указывать ключи при деструктуризации массивов.

    В качестве интересного побочного эффекта теперь мы можем присваивать только необходимые ключи из массива.

    Также можно деструктурировать многомерные массивы, используя списки внутри списка.

    5. Видимость констант класса

    Константы класса помогают нам задать значимое имя для значения, которое используется в данном классе. Эти константы всегда были публичными, и доступ к ним можно было получить из внешнего класса. Но ведь мы далеко не всегда хотим выставлять их на обозрение внешнему миру, не так ли?
    В версии PHP7.1 мы можем приписать константам класса модификаторы видимости точно так же, как мы делаем с методами и свойствами.

    Здесь константа MAX_LENGHT является внутренней константой класса PostValidator , и мы не хотим, чтобы это значение было доступно для внешнего мира.

    6. Типы, допускающие значение null

    Этот функционал позволяет нам задать подсказки относительно типа функции, позволяя при этом использовать значения null в качестве параметра или возврата. Мы можем задать параметру или результату тип Null , поставив знак вопроса (?) перед подсказкой типа.

    Точно также это работает и для возврата.

    7. Функции типа void

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

    Когда для возврата задано значение void , функция либо должна упускать оператор возврата вообще, либо может иметь пустой оператор возврата. Функция не должна возвращать никаких значений.

    8. Захват исключений разных типов

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

    В версии PHP 7.1 мы можем работать с множественными исключениями в рамках одного общего блока захвата.

    Множественные исключения разделяются при помощи одного символа конвейеризации. Это позволит избежать дублирования одного и того же кода для работы с различными типами исключений.

    9. Исключение «Слишком мало аргументов»

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

    В версии PHP 7.1 вызов функции без необходимых параметров приведет к срабатыванию исключения ошибки ArgumentCountError .

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

    Итоги

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

    Цукерберг рекомендует:  Вакансии DDoS-GUARD
  • Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих