Чистый PHP код, часть 1
Posted on 19/10/2014
Не секрет, что все когда то были новичками и писали отвратительного качества код.
Мастерство, позволяющее писать действительно аккуратный код, приходит с годами опыта, и порой приходится осознавать свои собственные упущения в области владения синтаксисом PHP. В этой статье я собрал несколько простых примеров использования полезных PHP функций, которые делают ваш код гораздо приятнее.
php -a
Спросите себя, вы тоже создавали отдельный php файл для того, чтобы запустить какую - либо функцию, описание которой занимает 1 строку?
А все это можно делать в консольной строке, используя интерактивный режим php. Конечно, данная возможность может быть интересна только тем, у кого есть собственный виртуальный сервер (VPS) или тем, кто работает под Linux/MacOS Посмотрите, как удобно тестировать что - то незначительное в интерактивном режиме PHP:
array_map()
Что же делать, если вам нужно к каждому элементу массива применить какую - либо функцию? Неужели проделывать все это в цикле foreach? Нет! Есть более элегантное решение!
php > $values = array('cat', 'dog', 'elephant');
php > print_r(array_map('strtoupper', $values));
Array
(
[0] => CAT
[1] => DOG
[2] => ELEPHANT
)
array_filter()
Представьте, что у вас есть массив значений, в котором могут оказаться пустые строки или NULL значения. Как наиболее быстрым способом очистить такой массив? Например,
php > $values = array('cat', 'dog', 'elephant', null, '', 'monkey');
php > print_r(array_filter($values));
Array
(
[0] => cat
[1] => dog
[2] => elephant
[5] => monkey
)
str_pad
Помните своё состоение, когда вам требовалось точно быть уверенным, что если вам будет передано число, меньшее 10, то нужно обязатель иметь формат с ведущим нулем (например, 07)? Все решается при помощи str_pad();
echo str_pad('0', 2, '4');
sprintf()
Если вам нужно динамически составить строку, в которой будут разные значения?
Что - то вроде:
$str = ‘My first name is ’ . $first_name . ‘ and my last name is ’ . $last_name?
А вот какое - то время назад я обнаружил, что такую строку можно строить, используя sprintf(). Например,
$str = sprintf(‘My first name is %s and my last name is %s’, $first_name, $last_name);
Разница ощутима?
chain method
Припоминаете собственное удивление от тех PHP классов, которые позволяют делать что - то вроде: $driver -> cache() -> file() -> save(); Весь секрет в том, чтобы в конце каждого метода возвращать $this. Например,
class Cat {
public $hungry = true;
public $happy = true;
public function feed($food)
{
$this -> hungry = empty($food) ? true : false;
return $this;
}
public function hug($qty)
{
$this -> happy = $qty > 5 ? true : false;
return $this;
}
}
$my_cat = new Cat();
$my_cat -> feed(‘fish’) -> hug(4) -> feed(‘water’) -> hug(10);
error_log
Что же вы делаете, когда пытаетесь узнать значение той или иной переменной? Неужели выводите эту переменную прямо в браузер, используя конструкцию print_r()?
Все это можно делать при помощи error_log(), которая передает значение интересуемых переменных в лог файл и не показывает никаких странных символов в браузере пользователя. Например,
error_log(print_r($_POST, true));
Кстати, гораздо проще “слушать” лог файл при помощи вызова tail.
tail -f /var/log/nginx/error.log