§8. Краткий обзор некоторых встроенных возможностей PHP

8.1. Предисловие ко второй части учебника.

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

8.2. Расширения, относящиеся к переменным и типам.

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

По ходу просмотра примеров не пренебрегайте набором кода и обращением к официальному справочнику.

<?php
//Создадим несколько переменных разных типов
$var_int=15;
$var_float=23.57;
$var_str="apple";
$var_m=["name"=>"Dima", 11];
$var_bool=true;
$var_null=null;


echo '-------- var_dump() -------- <br><br>';

//var_dump() выводит информацию о переменных и не возвращает значения 
//Выведет int(15) float(23.57) string(5) "apple" bool(true) NULL
var_dump($var_int, $var_float, $var_str, $var_bool, $var_null);
echo '<br>';
var_dump($var_m); //Выведет array(2) { ["name"]=> string(4) "Dima" [0]=> int(11) } 
echo '<br><br><br>';


echo '-------- print_r() --------<br><br>';

//print_r() выводит удобочитаемую информацию о переменной
print_r($var_float); //Выведет 23.57
echo '<br>';
print_r($var_str); //Выведет apple
echo '<br>';
print_r($var_m); //Выведет Array ( [name] => Dima [0] => 11 ) 
echo '<br><br><br>';


echo '-------- is_int(), is_array(), is_bool() и т.д. --------<br><br>';

//is_int(), is_array(), is_bool() и аналогичные функции проверяют, относится
//ли переменная к данному типу. В случае успеха возвращает true, иначе false
var_dump(is_int($var_int)); //Выведет bool(true)
echo '<br>';
var_dump(is_string($var_int)); //Выведет bool(false)
echo '<br>';
var_dump(is_null($var_null)); //Выведет bool(true)
echo '<br><br><br>';


echo '-------- gettype() --------<br><br>';

//gettype() возвращает тип переменной: "boolen", "integer", "double", "string", 
//"array", "object", "resource", "NULL", "unknown type",
echo gettype($var_int).'<br>'; //Выведет integer
echo gettype($var_m).'<br><br><br>'; //Выведет array


echo '-------- settype() --------<br><br>';

//settype() присваивает переменной новый тип,
//можно применять bool, int, float, string, array, object, null
var_dump(settype($var_int, "string")); //Выведет bool(true), преобразовали успешно
echo '<br>';
var_dump(settype($var_float, "bool")); //Выведет bool(true), преобразовали успешно
echo '<br><br><br>';


echo '-------- boolval() и аналогичные:<br><br>';

//boolval() возвращает логическое значение переменной  
//Также имеются функции strval(), intval(), floatval() 
var_dump(boolval($var_str)); //Выведет bool(true)
echo '<br>';
var_dump(boolval($var_null)); //Выведет bool(false)
echo '<br><br><br>';


echo '-------- empty() -------- <br><br>';

//empty() проверяет, пуста ли переменная (переменная считается пустой, 
//если она не существует или её значение равно FALSE;
var_dump(empty($a)); //Выведет bool(true), т.к. она еще не существует
$a;
var_dump(empty($a)); //Выведет bool(true), т.к. она еще не инициализирована
$a=false;
var_dump(empty($a)); //Выведет bool(true), т.к. false
$a=null;
var_dump(empty($a)); //Выведет bool(true), т.к. null
echo '<br>';
//Во всех остальных случаях переменная считается не пустой и вернет false
var_dump(empty($var_int)); //Выведет bool(false)
var_dump(empty($var_m)); //Выведет bool(false)
echo '<br><br><br>';


echo '-------- isset() -------- <br><br>';

//isset() определяет, была ли установлена переменная значением отличным от NULL
//Возвращает TRUE в случае успеха и FALSE в противном случае
var_dump(isset($b)); //Выведет bool(false), т.к. она еще не существует
$b;
var_dump(isset($b)); //Выведет bool(false), т.к. она еще не инициализирована
$b=null;
var_dump(isset($b)); //Выведет bool(false), т.к. null
echo '<br>';
//Во всех остальных случаях переменная считается установленной и вернет true
$b=false;
var_dump(isset($b)); //Выведет bool(true)
$b='';
var_dump(isset($b)); //Выведет bool(true)
$b=0;
var_dump(isset($b)); //Выведет bool(true)
$b=[];
var_dump(isset($b)); //Выведет bool(true)
echo '<br><br><br>';


echo '-------- unset() -------- <br><br>';

//unset() удаляет указанные переменные и не возвращает значения
unset($var_int, $var_m); 
var_dump(empty($var_int)); //Тут выведет bool(true)
var_dump(empty($var_m)); //Тут выведет bool(true)
?>

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

Если данные хранящиеся в переменной, например, в массиве, необходимо сохранить или передать между скриптами, их можно сериализовать:

Использование функций serialize() и unserialize() показано в примере 8.2.

<?php
//Создадим массив с данными
$var_m=["name"=>"Dima", 11, ["one"=>"orange", true, 33]];
//Выведем информацию о нем: array(3) { ["name"]=> string(4) "Dima" [0]=> int(11) 
//[1]=> array(3) { ["one"]=> string(6) "orange" [0]=> bool(true) [1]=> int(33) } } 
var_dump($var_m);
echo '<br><br>';

//Пусть нам нужно сохранить его, например, в базе данных MySQL
//Сериализуем его, преобразовав в специальную строку, для удобства хранения
$a=serialize($var_m);
//Посмотрим, как выглядит строка для хранения: a:3:{s:4:"name";
//s:4:"Dima";i:0;i:11;i:1;a:3:{s:3:"one";s:6:"orange";i:0;b:1;i:1;i:33;}}
echo $a.'<br><br>';

//Теперь нам нужно извлечь хранимые данные для использования
//Преобразуем строку обратно в массив
$b=unserialize($a);
//Посмотрим, что получилось: array(3) { ["name"]=> string(4) "Dima" [0]=> int(11) 
//[1]=> array(3) { ["one"]=> string(6) "orange" [0]=> bool(true) [1]=> int(33) } } 
var_dump($b);
?>

Пример 8.2. Использование сериализации данных

Функции для работы с массивами выделены в отдельный подраздел. Подробное описание, опять же, смотрите в официальном справочнике, мы же приведем порядка 15-20 примеров с краткими комментариями (см. пример 8.3).

<?php
//Создадим массивы с данными
$m_1=["1", 2, "three"];
$m_2=["one"=>1, 3, "city", false];
$m_3=[1, 1, "orange"];

echo '-------- count() --------<br><br>';

//count() подсчитывает количество элементов массива или что-то в объекте 
//и возвращает полученное число
var_dump(count($m_1)); //Выведет int(3)
echo '<br>'; 
var_dump(count($m_2)); //Выведет int(4)
echo '<br><br><br>';


echo '-------- in_array() --------<br><br>';

//in_array() проверяет, присутствует ли значение в массиве, и в случае успеха  
//возвращает true, иначе false
var_dump(in_array(1, $m_1)); //Выведет bool(true)
echo '<br>';
//Зададим строгое соответствие
var_dump(in_array(1, $m_1, true)); //Выведет bool(false)
echo '<br><br><br>';


echo '-------- array_key_exists(), см. также array_keys() --------<br><br>';

//array_key_exists() проверяет (не строго), присутствует ли в массиве  
//указанный ключ, и в случае успеха возвращает true, иначе false
var_dump(array_key_exists(1, $m_1)); //Выведет bool(true)
echo '<br>';
var_dump(array_key_exists('1', $m_1)); //Выведет bool(true)
echo '<br>';
var_dump(array_key_exists(3, $m_1)); //Выведет bool(false)
echo '<br><br><br>';


echo '-------- array_flip() --------<br><br>';

//array_flip() меняет местами ключи с их значениями в массиве и возвращает 
//перевернутый массив или 	null в случае ошибки
//Выведет  array(3) {[1]=>int(0) [2]=>int(1) ["three"]=>int(2)}
var_dump(array_flip($m_1));
echo '<br><br><br>';


echo '-------- array_reverse() --------<br><br>';

//array_reverse() возвращает массив с элементами в обратном порядке
//Выведет array(3) {[0]=>string(5) "three" [1]=>int(2) [2]=>string(1) "1"}
var_dump(array_reverse($m_1));  
echo '<br><br><br>';


echo '-------- array_unique() --------<br><br>';

//array_unique() убирает повторяющиеся значения из массива 
//и возвращает отфильтрованный массив
//Выведет array(2) {[0]=>int(1) [2]=>string(6) "orange"}
var_dump(array_unique($m_3));  
echo '<br><br><br>';


echo '-------- array_unshift(), см. также array_shift() --------<br><br>';

//array_unshift() добавляет один или несколько элементов в начало массива  
//и возвращает новое количество элементов в массиве 
var_dump(array_unshift($m_1, 4, 5)); //Выведет int(3) 
echo '<br>';
var_dump($m_1); //Выведет array(3) {[0]=>int(4) [1]=>int(5) [2]=>int(2)} 
echo '<br><br><br>';


echo '-------- array_push(), см. также array_pop() --------<br><br>';

//array_push() добавляет один или несколько элементов в конец массива  
//и возвращает новое количество элементов в массиве 
var_dump(array_push($m_1, "apple", 7)); //Выведет int(5)
echo '<br>';
//array(5){[0]=>int(4) [1]=>int(5) [2]=>int(2) [3]=>string(5) "apple" [4]=>int(7)} 
var_dump($m_1); //Т.е. массив имеет вид [4,5,2,"apple",7]
echo '<br><br><br>';


echo '-------- array_slice() --------<br><br>';

//array_slice() выбирает часть массива в соответствии 
//с указанными параметрами и возвращает ее (сам массив остается прежним)
//Выведет array(2) {[0]=>int(4) [1]=>int(5)}, т.е. [4,5]
var_dump(array_slice($m_1, 0, 2)); //2 символа с начала
echo '<br>';
//array(5) {[0]=> int(4) [1]=>int(5) [2]=>int(2) [3]=>string(5) "apple" [4]=>int(7)}
var_dump(array_slice($m_1, 0, 9));  //Выведет все элементы массива, т.к. их меньше 
echo '<br>';
//array(2) {[0]=>int(2) [1]=>string(5) "apple"}, т.е. [2, "apple"]
var_dump(array_slice($m_1, -3, 2));  //2 символа начиная с 3 позиции с конца 
echo '<br>';
//array(3) {[0]=>int(5) [1]=>int(2) [2]=>string(5) "apple"}, т.е. [5, 2, "apple"]
var_dump(array_slice($m_1, -4, -1)); //Отсчет с конца до -1 позиции 
echo '<br><br><br>';


echo '-------- array_splice() --------<br><br>';

//array_splice() удаляет часть массива или заменяет её другими элементами  
//и возвращает массив, содержащий удалённые элементы 
$m_4=[1,2,3,4,5];
//Выведет array(3) {[0]=>int(2) [1]=>int(3) [2]=>int(4)}
var_dump(array_splice($m_4, 1, 3)); //Теперь $m_4==[1,5]
echo '<br>';
//Выведет array(1) {[0]=>int(5)} (один удалили, а 4 добавили)
var_dump(array_splice($m_4, -1, 1, [6,7,8,9])); //Теперь $m_4==[1,6,7,8,9]
echo '<br>';
//Выведет array(1) {[0]=> int(7)} (удалили один элемент с -3 по -2 не включая)
var_dump(array_splice($m_4, -3, -2)); //Теперь $m_4==[1,6,9]
echo '<br>';
//Выведет array(4) {[0]=>int(1) [1]=>int(6) [2]=>int(8) [3]=>int(9)} 
var_dump(array_splice($m_4, 0)); //Теперь $m_4==[] (удалили с 0 и до конца)
echo '<br><br><br>';


echo '-------- array_product(), см. также array_sum() --------<br><br>';

//array_product() возвращает произведение значений массива 
$m_5=[1,2,3];
var_dump(array_product($m_5)); //Выведет int(6)
echo '<br><br><br>';


echo '-------- array_rand(), см. также shuffle () --------<br><br>';

//array_rand() выбирает одно или несколько случайных значений 
//из массива и возвращает их ключи 
var_dump(array_rand($m_5)); //Вывело int(0) (случайный ключ массива)
echo '<br><br><br>';


echo '-------- list() --------<br><br>';

//list() языковая конструкция, которая присваивает переменным из списка значения   
//из массива за одну операцию; возвращает присвоенный массив 
$m_10=[1,4,7];
//Присвоим значения массива переменным
list($d_1, $d_2, $d_3)=$m_10; 
var_dump($d_1, $d_2, $d_3); //Выведет int(1) int(4) int(7) 
echo '<br>';

list($d_4, list($d_5, $d_6), $d_7) = [1, [7, 9], "yes"];
var_dump($d_4, $d_5, $d_6, $d_7); //Выведет int(1) int(7) int(9) string(3) "yes" 
echo '<br><br><br>';


echo 'sort(), см. также rsort(), usort(), uasort(), ksort(),<br> krsort(), uksort(), '.
		'asort(), arsort(), natsort(), natcasesort(), array_multisort() и др. <br><br>';

//sort() сортирует массив и в случае успеха возвращает true, иначе false 
$m_6=[7,3,6];
var_dump(sort($m_6)); //Выведет bool(true)
echo '<br>';
var_dump($m_6); //Выведет array(3) {[0]=>int(3) [1]=>int(6) [2]=>int(7)} 
echo '<br>';

$m_7=['Петя','Вася', 'вася'];
var_dump(sort($m_7, true)); //Ключи сохраняются
echo '<br>';
//Выведет array(3) {[0]=>string(8) "Вася" [1]=>string(8) "Петя" [2]=>string(8) "вася"}
var_dump($m_7);
echo '<br><br><br>';


echo '-------- array_filter() --------<br><br>';

//array_filter() фильтрует элементы массива с помощью callback-функции и 
//возвращает отфильтрованный массив (сам массив также меняется)
function my_func($val){
	return $val>5;
}
$m_8=[1,2,3,4,5,6,7];

//Выведет array(2) {[5]=>int(6) [6]=>int(7)} (передавали только значения)
var_dump(array_filter($m_8, "my_func")); 
echo '<br>';
//Выведет array(1) {[6]=>int(7)} (передавали только ключи)
var_dump(array_filter($m_8, "my_func", ARRAY_FILTER_USE_KEY)); 
echo '<br>';

function my_func_2($v, $k){
	return ($v+$k)>7;
}
//Выведет array(2) {[5]=>int(6) [6]=>int(7)} (передавали пары значение-ключ)
var_dump(array_filter($m_8, "my_func_2", ARRAY_FILTER_USE_BOTH)); 
echo '<br><br><br>';


echo 'array_walk(), см. также array_walk_recursive(), '. 
		'array_map(), array_reduce(),  <br><br>';

//array_walk() применяет заданную пользователем функцию к каждому элементу 
//массива и в случае успеха возвращает true, иначе false 
function my_func_3(&$v, $k){ //Значение передали по ссылке (можно и по значению)
	return $v=$v+$k;
}
$m_9=[1,2,3];

var_dump(array_walk($m_9, "my_func_3")); //Выведет bool(true) 
echo '<br>';
var_dump($m_9); //Выведет array(3) {[0]=>int(1) [1]=>int(3) [2]=>int(5)}
echo '<br><br><br>';


/* Также посмотрите функции сравнения массивов и работы с несколькими массивами: 
array_intersect() и похожие, array_diff() и похожие, array_merge() и др.  */
?>

Пример 8.3. Работа с массивами

Обратите также внимание на стандартные подразделы 'Управление функциями', 'Классы и объекты'.

8.3. Обработка текста.

Следует помнить, что в PHP отсутствует встроенная поддержка Unicode, т.е. язык поддерживает только 256 различных символов, каждому из которых соответствует один байт. Поэтому, для работы с многобайтовыми кодировками вроде 'UTF-8', которая используется нами при верстке веб-страниц, следует отдавать предпочтение специальным функциям и расширениям для работы с многобайтовыми строками. Все они собраны в разделе 'Поддержка языков и кодировок' -> 'Многобайтовые строки'. Что касается функций для работы с однобайтовыми строками, то их нужно искать в разделе 'Обработка текста'. При этом отметим, что некоторые функции одинаково полезны как для работы с однобайтовыми, так и многобайтовыми строками. Использование некоторых функций для обработки строк показано в примере 8.4 (не забывайте заглядывать в справочник).

<?php
echo "------- Несколько примеров из раздела 'Обработка текста' -------<br><br>";


echo '-------- htmlspecialchars() -------- <br><br>';
		
//При выводе текста из PHP-кода в HTML-код можно использовать функции 
//htmlspecialchars(), которая преобразует специальные символы в HTML-сущности, или 
//htmlentities(), которая преобразует все возможные символы в соответствующие 
//HTML-сущности. Для обратного преобразования используются функции 
//htmlspecialchars_decode() и html_entity_decode()
//ENT_QUOTES - указывает на преобразование как двойных, так и одинарных кавычек
echo htmlspecialchars('<p>Абзац</p>', ENT_QUOTES);//Выведет '<p>Абзац</p>'
echo "<p>Абзац</p><br>"; //Выведет строку 'Абзац'


echo '-------- nl2br() -------- <br><br>';
		
//nl2br() удобна при выводе текста из PHP-кода в HTML-код, поскольку вставляет
//<br> перед каждым переводом строки \r\n, \n\r, \n и \r (они в HTML не работают) 
//Обе строки примера будут выведены на разных строках
echo nl2br("Первая строка.". PHP_EOL ."Вторая строка.");


echo '-------- sha1() -------- <br><br>';

//Для шифровки строки предназначены sha1(), sha1_file(), md5(), md5_file(), crypt()
//Выведет 8e35c31399092c3c72aecbfeadd4286af89b0a1a - это хеш слова 'дом'    
echo  sha1('дом')." - это хеш слова 'дом'".'<br><br>';	


echo '-------- addslashes() -------- <br><br>';

//addslashes() - экранирует в строке одиночные кавычки ('), двойные кавычки ("), 
//обратный слеш (\) и NUL (NULL байт).stripslashes() - удаляет экранирование символов
echo addslashes('Посетил "Березку"...').'<br><br>'; //Выведет 'Посетил \"Березку\"...'


echo '-------- implode() -------- <br><br>';

//implode() - объединяет элементы массива в строку, а explode() - наоборот, разбивает 
//строку по указанному разделителю и возвращает массив из полученных частей строки
$m=['желтый','синий','красный'];

//Выведет строку 'Цвета светофора: желтый, синий, красный.'
echo 'Цвета светофора: '.implode(', ', $m).'. <br>';
$m_1=explode(', ', 'желтый, синий, красный');

//array(3) {[0]=>string(12) "желтый" [1]=>string(10) "синий" [2]=>string(14) "красный"}
var_dump($m_1);
echo '<br><br>';


echo '-------- strlen() -------- <br><br>';

//Выведет 20, т.к. strlen() возвращает количество байтов, а не символов.
//Старайтесь по возможности использовать функции для обработки многобайтовых строк!
echo strlen('Яркий цвет.').'<br><br>';

/* Отметим, что в данном разделе также находятся операторы echo и print */

echo '------- Примеры обработки многобайтовых строк -----------'.'<br><br>';


echo '-------- mb_strlen() -------- <br><br>';

//mb_strlen() — возвращает количество символов в строке
echo mb_strlen('Яркий цвет.').'<br><br>'; //Выведет 11


echo '-------- mb_strpos() -------- <br><br>';

//mb_strpos() — возвращает позицию первого вхождения подстроки в строке
//mb_stripos() — тоже самое, но без учета регистра 
//Для поиска с конца строки используются mb_strrpos() и mb_strripos()
echo mb_strpos('Яблоко', 'о').'<br>'; //Выведет 3 
//Начнем поиск с позиции 4 (позиции символов нумеруются с нуля)
echo mb_strpos('Яблоко', 'о', 4).'<br><br>'; //Выведет 5


echo '-------- mb_strstr() -------- <br><br>';

//mb_strstr() — ищет позицию первого вхождения подстроки в строке и возвращает 
//часть строки до или после (по умолчанию) этой позиции. Соответственно, 
//mb_stristr() делает тоже самое, но без учета регистра
//Для поиска с конца строки используются mb_strrchr() и mb_strrichr()
echo mb_strstr('Яблоко', 'о').'<br>'; //Выведет 'око' (включая символ вхождения)
echo mb_strstr('Яблоко', 'о', true).'<br><br>'; //Выведет 'Ябл'


echo '-------- mb_substr() -------- <br><br>';

//mb_substr() - возвращает заданную часть строки, включая символ стартовой позиции
echo mb_substr('Яркий цвет.', 3).'<br>'; //Выведет 'ий цвет.' 
echo mb_substr('Яркий цвет.', 0, 5).'<br>'; //Выведет 'Яркий'
echo mb_substr('Яркий цвет.', 2, 6).'<br><br>'; //Выведет 'кий цв'


echo '-------- mb_substr_count() -------- <br><br>';

//mb_substr_count() - возвращает количество вхождений подстроки
echo mb_substr_count('Яблоко', 'о').'<br><br>'; //Выведет 2


echo '-------- mb_strtolower() -------- <br><br>';

//mb_strtolower() - возвращает строку в нижнем регистре, mb_strtoupper() - в верхнем
echo mb_strtolower('ЯблОко').'<br><br>'; //Выведет 'яблоко'


echo '-------- mb_split() -------- <br><br>';

//mb_split() - разбивает многобайтовые строки на заданное число частей 
//по указанному разделителю, используя регулярное выражение
$m_2=mb_split(' ', 'Яркий цвет ковра.', 3); 
//array(3) {[0]=>string(10) "Яркий" [1]=>string(8) "цвет" [2]=>string(11) "ковра."}
var_dump($m_2);
?>

Пример 8.4. Работа со строками

8.4. Математические расширения.

Как и в других языках программирования, в PHP имеется как набор математических констант, так и набор стандартных математических функций. Найти их можно в подразделе 'Математические расширения' -> 'Math'. При этом следует помнить, что функции данного подраздела работают только с числами в диапазонах типов integer и float. Если же возникает необходимость в работе с большими числами, следует обращаться к подразделу 'BC Math', содержащему математические функции произвольной точности. Рассмотрим некоторые из математических функций на примере 8.5.

<?php

echo '-------- is_nan() -------- <br><br>';

//is_nan() - проверяет, является ли значение "не числом", тогда true, иначе false  
echo is_nan(sqrt(-1)).'<br><br>'; //Выведет 1, т.е. true


echo '-------- abs() -------- <br><br>';

//abs() - возвращает модуль числа 
echo abs(-4.2).'<br>'; //Выведет -4.2


echo '-------- ceil() -------- <br><br>';

//ceil() - округляет дробь в большую сторону  
echo ceil(2.01).'<br><br>'; //Выведет 3


echo '-------- floor() -------- <br><br>';

//floor() - округляет дробь вниз 
echo floor(3.9).'<br><br>'; //Выведет 3


echo '-------- round() -------- <br><br>';

//round() - округляет дробь
echo round(2.01).'<br>'; //Выведет 2
echo round(3.9).'<br>'; //Выведет 4
echo round(3.546349, 4).'<br>'; //Выведет 3.5463
echo round(3.55, 1).'<br>'; //Выведет 3.6
echo round(3.55, 1, PHP_ROUND_HALF_DOWN).'<br><br>'; //Выведет 3.5 (см. справочник)


echo '-------- sqrt() -------- <br><br>';

//sqrt() - извлекает квадратный корень
echo sqrt(9).'<br>'; //Выведет 3
echo sqrt(-9).'<br><br>'; //Выведет NAN


echo '-------- pow() -------- <br><br>';

//pow() - возведение в степень. Можно также использовать оператор ** 
echo pow(3, 4).'<br>'; //Выведет 81 (можно также 3**4)
echo pow(3, -2).'<br>'; //Выведет 0.11111111111111 (т.е. 1/(3e2))
echo pow(0, 0).'<br>'; //Выведет 1
echo pow(-2, 0).'<br>'; //Выведет 1
echo pow(-2, 3).'<br>'; //Выведет -8 
echo pow(-2, -2).'<br>'; //Выведет 0.25 (т.е. 1/(-2e2))
echo pow(4, 0.5).'<br>'; //Выведет 2 (т.е. sqrt(4))
echo pow(-4, -0.5).'<br><br>'; //Выведет NAN (т.к. 1/[sqrt(-4)]==NAN)


echo '-------- max() -------- <br><br>';

//max() - возвращает наибольшее значение (также см. min())
echo max(0.5, 3, -2).'<br>'; //Выведет 3
echo max('10.5', pow(3,2), abs(-2)).'<br><br>'; //Выведет 10,5


echo '-------- mt_rand() -------- <br><br>';

//mt_rand() - генерирует случайное значение методом 'Вихря Мерсена'  
echo mt_rand(10, 20).'<br><br>'; //Выведет число из отрезка [10,20]


echo '-------- pi() -------- <br><br>';

//pi() - возвращает число Пи, как и константа M_PI
//Смотри также log1p(), log10(), log(), exp(), expm1() 
echo pi().'<br><br>'; //Выведет 3.1415926535898


echo '-------- base_convert() -------- <br><br>';

//base_convert() - переводит число из одной системы счисления в другую
//Может теряться точность представления больших чисел (см. справочник)
echo base_convert('13', 10, 16).'<br>';//Выведет d (см. также статью о переводах чисел)
echo base_convert('13', 10, 2).'<br><br>'; //Выведет 1101 


echo '-------- hexdec() -------- <br><br>';

//hexdec() - переводит число из шестнадцатеричной системы счисления в десятичную 
//dechex() - переводит число из десятичной системы счисления в шестнадцатеричную
//decbin() - переводит число из десятичной системы счисления в двоичную
//bindec() - переводит число из двоичной системы счисления в десятичную
//decoct() - переводит число из десятичной системы счисления в восьмеричную
//octdec() - переводит число из восьмеричной системы счисления в десятичную
echo hexdec('2ED').'<br><br>'; //Выведет 749 (см. также статью о переводах чисел)


echo '-------- deg2rad() -------- <br><br>';

//deg2rad() - преобразует значение из градусов в радианы 
//rad2deg() - преобразует значение из радианов в градусы
echo deg2rad(30).'<br><br>'; //Выведет 0.5235987755983


echo '-------- sin() -------- <br><br>';

//sin() - вычисляет синус. См. также cos(), tan() и др. тригонометрические ф-ции
echo sin(30).'<br>'; //Выведет -0.98803162409286
?>

Пример 8.5. Использование математических функций

8.5. Возможности для работы с датой и временем.

Функции раздела 'Дата и время' позволяют получить дату и время с сервера, на котором запущен PHP сценарий, и затем форматировать их различными способами. Информация о дате и времени хранится в памяти в виде 64-разрядных чисел, что дает возможность использовать все пригодные представления даты в диапазоне примерно 292 миллиардов лет как в прошлое, так и в будущее. Рассмотрим буквально несколько функций (см. пример 8.6), остальные, опять же, смотрите в справочнике. При этом обратите отдельное внимание на подразделы 'Допустимые форматы Даты/Времени' и 'Список поддерживаемых временных зон'.

<?php

echo '-------- date_default_timezone_get() -------- <br><br>';

//date_default_timezone_get() возвращает временную зону, используемой по умолчанию 
//всеми функциями даты/времени в скрипте 
echo date_default_timezone_get().'<br>'; //Выведет, например, 'Europe/Berlin'


echo '-------- getdate() -------- <br><br>';

//getdate() возвращает информацию о дате/времени в виде ассоциативного массива с 
//ключами "seconds", "minutes", "hours" и т.д. (см. справочник) 
$dt=getdate(); 
echo getdate()['hours'].' часов '.'<br>'; //Выведет часы зоны 'Europe/Berlin'


echo '-------- date_default_timezone_set() -------- <br><br>';

//date_default_timezone_set(), которая устанавливает временную зону по умолчанию  
//для всех функций даты/времени в скрипте  
date_default_timezone_set('Europe/Minsk');
$dt=getdate(); 
echo getdate()['hours'].' часов '.'<br>'; //Выведет часы временной зоны 'Europe/Minsk' 


echo '-------- time() -------- <br><br>';

//time() - возвращает количество секунд, прошедших с 1 января 1970 00:00:00 GMT 
//т.е. с начала Эпохи Unix и до текущего времени  
echo time().'<br>'; //Выведет количество секунд, например, 1462165479


echo '-------- date() -------- <br><br>';

//date() - форматирует вывод системной даты/времени (см. таблицу допустимых символов)
//Зададим, например, формат 'год месяц день, часы : минуты : секунды'
echo date('Y m d,  H : i : s').'<br>'; //Выведет, например, 2016 05 02, 08 : 16 : 46
?>

Пример 8.6. Работа с датой и временем

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

Словарь новых английских слов

dump [dʌmp] – куча хлама, вывод подробной
информации на экран.
print [prɪnt] – печатать.
serialize [ˈsɪərɪəlʌɪz] – издавать сериями, выпусками.
long [lɔːŋ] – длинный.
real [rɪəl] – реальный, настоящий.
import [ˈɪmpɔːt] – ввозить, импортировать
export [ɪkˈspɔːt] – вывозить, экспортировать.
debug [diːˈbʌɡ] – отладка, устранять ошибки.
flip [flɪp] – транспонировать, перевернуть.
reverse [rɪˈvəːs] – менять направление.
unique [juːˈniːk] – уникальный, особенный.
shift [ʃɪft] – сдвигать, перемещать, переключать.
push [pʊʃ] – толкать, продвигать.
pop [pɒp] – выбирать, извлекать из стека.
slice [slʌɪs] – часть, доля, резать ломтиками.
splice [splʌɪs] – сращивать, соединять внакрой.
product [ˈprɒdʌkt] – продукт, результат, произведение.
sum [sʌm] – сумма, суммировать.
random [ˈrandəm] – случайный, произвольный.
shuffle [ˈʃʌf(ə)l] – перемешивать.
sort [sɔːt] – сортировать.
filter [ˈfɪltə] – фильтр, фильтровать.
walk [wɔːk] – ходить, гулять.
reduce [rɪˈdjuːs] – уменьшать, сокращать.
search [səːtʃ] – искать, поиск.
merge [məːdʒ] – сливать, соединять.
fill [fɪl] – заполнять.
intersect [ɪntəˈsɛkt] – пересекать, перекрывать.
pad [pæd] – блокнот, набивать, увеличивать.
extract [ˈekstrækt] – извлекать, вытягивать.
register [ˈrɛdʒɪstə] – регистрировать, отмечать, реестр, ведомость.
entity [ˈɛntɪti] – сущность, существование.
shut [ʃʌt] – закрывать.
chunk [tʃʌŋk] – ломоть, большой кусок.
split [splɪt] – расщеплять, раскалывать.
implode [ɪmˈpləʊd] – интегрировать, концентрировать.
explode [ɪkˈspləʊd] – взрывать, разрушать, разбивать.
chop [tʃɒp] – рубить, крошить, нарезать.
join [dʒɔɪn] – соединять, объединять.
compare [kəmˈpɛː] – сравнивать.
convert [kənˈvɜːt] – конвертировать, перестраивать, переоборудовать.
handler [ˈhandlə] – обработчик.
internal [ɪnˈtəːn(ə)l] – внутренний.
encoding [ɪnˈkəʊdɪŋ] – кодировка, кодирующий.
send [send] – посылать, передавать.
cut [kʌt] – резать, разрезать, порез.
alias [ˈeɪlɪəs] – кличка, прозвище, другое имя.
match [mætʃ] – искать соответствие, соответствовать, спичка.
floor [flɔː] – пол, дно.
ceil [siːl] – потолок.
round [raʊnd] – круглый, округлять.
pow [paʊ] – башка.

 

belarusweb.net   ©  Петр Романовский, Минск, 2016.