Чистый PHP код, часть 1

Posted on 19/10/2014
PHP
Чистый PHP код, часть 1

Не секрет, что все когда то были новичками и писали отвратительного качества код.

Мастерство, позволяющее писать действительно аккуратный код, приходит с годами опыта, и порой приходится осознавать свои собственные упущения в области владения синтаксисом 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

Back to Blog


Subscribe to blog updates


Comments

comments powered by Disqus