learnxinyminutes-docs/ru-ru/php-ru.html.markdown
2015-10-12 22:25:15 +06:00

665 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
language: PHP
contributors:
- ["Malcolm Fell", "http://emarref.net/"]
- ["Trismegiste", "https://github.com/Trismegiste"]
translators:
- ["SlaF", "https://github.com/SlaF"]
- ["Corpsee", "https://github.com/corpsee"]
lang: ru-ru
filename: learnphp-ru.php
---
Этот документ описывает версию PHP 5 и выше.
```php
<?php // PHP код должен быть заключен в теги <?php
// Если ваш файл содержит только PHP-код, то можно
пропустить закрывающий ?>
// А так начинаются комментарии
# Это тоже комментарий но // предпочтительнее
/*
Окруженный /* и */ текст превращается
в многострочный комментарий
*/
// Используйте "echo" или "print" для вывода.
print('Hello '); // Напечатать "Hello " без перевода строки
// () необязательно применять для print и echo
echo "World\n"; // Напечатать "World" и перейти на новую строку.
// (все утверждения должны заканчиваться ;)
// Любые символы за пределами закрывающего тега выводятся автоматически:
?>
Hello World Again!
<?php
/************************************
* Типы и Переменные
*/
// Переменные начинаются с символа $.
// Правильное имя переменной начинается с буквы или знака подчеркивания,
// и может содержать любые цифры, буквы, или знаки подчеркивания.
// Не рекомендуется использовать кириллические символы в именах (прим. пер.)
// Логические значения нечувствительны к регистру
$boolean = true; // или TRUE или True
$boolean = false; // или FALSE или False
// Целые числа
$int1 = 12; // => 12
$int2 = -12; // => -12-
$int3 = 012; // => 10 (ведущий 0 обозначает восьмеричное число)
$int4 = 0x0F; // => 15 (ведущие символы 0x означают шестнадцатеричное число)
// Дробные числа
$float = 1.234;
$float = 1.2e3;
$float = 7E-10;
// Арифметика
$sum = 1 + 1; // 2
$difference = 2 - 1; // 1
$product = 2 * 2; // 4
$quotient = 2 / 1; // 2
// Арифметические сокращения
$number = 0;
$number += 1; // Увеличивает $number на 1
echo $number++; // Печатает 1 (инкрементируется после вывода)
echo ++$number; // Печатает 3 (инкрементируется до вывода)
$number /= $float; // Делится и результат присваивается $number
// Строки должны быть заключены в одинарные кавычки;
$sgl_quotes = '$String'; // => '$String'
// Избегайте двойных кавычек за исключением случаев интерполирования переменной
$dbl_quotes = "This is a $sgl_quotes."; // => 'This is a $String.'
// Специальные (escape) символы работают только в двойных кавычках
$escaped = "This contains a \t tab character.";
$unescaped = 'This just contains a slash and a t: \t';
// Заключайте переменные в фигурные скобки если это необходимо
$money = "I have $${number} in the bank.";
// Начиная с PHP 5.3, синтаксис nowdocs может использоваться для
// неинтерполированного многострочного текста
$nowdoc = <<<'END'
Multi line
string
END;
// Heredocs поддерживает интерполяцию переменных
$heredoc = <<<END
Multi line
$sgl_quotes
END;
// Строки соединяются при помощи .
echo 'This string ' . 'is concatenated';
/********************************
* Константы
*/
// Константа определяется при помощи define()
// и никогда не может быть изменена во время выполнения программы!
// Правильное имя константы начинается с буквы или символа подчеркивания,
// и содержит любое колличество букв, цифр и знаков подчеркивания.
define("FOO", "something");
// Доступ к константе возможен через прямое указание её имени
echo 'This outputs '.FOO;
/********************************
* Массивы
*/
// Все массивы в PHP - это ассоциативные массивы или хеши,
// Ассоциативные массивы, известные в других языках как HashMap.
// Работает во всех версиях РHP
$associative = array('One' => 1, 'Two' => 2, 'Three' => 3);
// В PHP 5.4 появился новый синтаксис
$associative = ['One' => 1, 'Two' => 2, 'Three' => 3];
echo $associative['One']; // печатает 1
// Список тоже содержит целочисленные ключи
$array = ['One', 'Two', 'Three'];
echo $array[0]; // => "One"
/********************************
* Вывод
*/
echo('Hello World!');
// Печатает Hello World! на stdout.
// Stdout это веб-страница запущенная в браузере.
print('Hello World!'); // Аналогично echo
// echo - это конструкция языка, вы можете опустить скобки.
echo 'Hello World!';
print 'Hello World!'; // Выводит Hello World!
$paragraph = 'paragraph';
echo 100; // Печать скалярной переменной напрямую
echo $paragraph; // или печать переменной
// Если короткие теги разрешены, или ваша версия PHP >= 5.4
// вы можете использовать сокращенный синтаксис echo
?>
<p><?= $paragraph ?></p>
<?php
$x = 1;
$y = 2;
$x = $y; // $x теперь содержит значение переменной $y
$z = &$y;
// $z содержит ссылку на $y. Изменение значения $z затронет значение $y и наоборот.
// Значение $x остается неизменным.
echo $x; // => 2
echo $z; // => 2
$y = 0;
echo $x; // => 2
echo $z; // => 0
/********************************
* Логические выражения
*/
$a = 0;
$b = '0';
$c = '1';
$d = '1';
// Утверждение (assert) выдает предупреждение если аргумент не true
// Эти сравнения всегда будут истинными, даже если типы будут различаться
assert($a == $b); // "равно"
assert($c != $a); // "не равно"
assert($c <> $a); // другое обозначение "не равно"
assert($a < $c); // меньше
assert($c > $b); // больше
assert($a <= $b); // меньше или равно
assert($c >= $d); // больше или равно
// Следующие утверждения истинны, если переменные имеют одинаковый тип.
assert($c === $d);
assert($a !== $d);
assert(1 == '1');
assert(1 !== '1');
// Переменные могут изменять тип в зависимости от их использования.
$integer = 1;
echo $integer + $integer; // => 2
$string = '1';
echo $string + $string; // => 2 (строка превращается в число)
// Выводится 0 по той причине, что оператор + не может привести строку 'one' к
// числовому типу
$string = 'one';
echo $string + $string; // => 0
// Приведение типов (type casting) может быть использовано для преобразование
// переменной в другой тип
$boolean = (boolean) 1; // => true
$zero = 0;
$boolean = (boolean) $zero; // => false
// Также существуют функции выполняющие приведение типов
$integer = 5;
$string = strval($integer);
$float = floatval($integer);
$var = null; // Null
// И похожая по действию функция
$integer = 10;
$boolen = settype($integer, "string") // теперь $integer имеет строковый тип
// settype возвращает true, если преобразование удалось и false в противном случае
/********************************
* Управляющие структуры
*/
if (true) {
print 'I get printed';
}
if (false) {
print 'I don\'t';
} else {
print 'I get printed';
}
if (false) {
print 'Does not get printed';
} elseif(true) {
print 'Does';
}
// Тернарный оператор
print (false ? 'Does not get printed' : 'Does');
$x = 0;
if ($x === '0') {
print 'Does not print';
} elseif($x == '1') {
print 'Does not print';
} else {
print 'Does print';
}
// Альтернативный синтаксис полезный для шаблонов
?>
<?php if ($x): ?>
This is displayed if the test is truthy.
<?php else: ?>
This is displayed otherwise.
<?php endif; ?>
<?php
// Использование switch.
switch ($x) {
case '0':
print 'Switch does type coercion';
break; // You must include a break, or you will fall through
// to cases 'two' and 'three'
case 'two':
case 'three':
// Do something if $variable is either 'two' or 'three'
break;
default:
// Do something by default
}
// Циклы: while, do...while и for
$i = 0;
while ($i < 5) {
echo $i++;
}; // Prints "01234"
echo "\n";
$i = 0;
do {
echo $i++;
} while ($i < 5); // Prints "01234"
echo "\n";
for ($x = 0; $x < 10; $x++) {
echo $x;
} // Напечатает "0123456789"
echo "\n";
$wheels = ['bicycle' => 2, 'car' => 4];
// Циклы foreach могут обходить массивы
foreach ($wheels as $wheel_count) {
echo $wheel_count;
} // Напечатает "24"
echo "\n";
// Вы можете обходить как ключи, так и их значения
foreach ($wheels as $vehicle => $wheel_count) {
echo "A $vehicle has $wheel_count wheels";
}
echo "\n";
$i = 0;
while ($i < 5) {
if ($i === 3) {
break; // Exit out of the while loop
}
echo $i++;
} // Напечатает "012"
for ($i = 0; $i < 5; $i++) {
if ($i === 3) {
continue; // Skip this iteration of the loop
}
echo $i;
} // Напечатает "0124"
/********************************
* Функции
*/
// Определение функции:
function my_function () {
return 'Hello';
}
echo my_function(); // => "Hello"
// Правильное имя функции начинается с буквы или символа подчеркивания
// и состоит из букв, цифр или знаков подчеркивания.
function add ($x, $y = 1) { // $y по умолчанию равно 1
$result = $x + $y;
return $result;
}
echo add(4); // => 5
echo add(4, 2); // => 6
// $result недоступен за пределами функции
// print $result; // Выдает предупреждение
// Начиная с PHP 5.3 вы можете объявлять анонимные функции:
$inc = function ($x) {
return $x + 1;
};
echo $inc(2); // => 3
function foo ($x, $y, $z) {
echo "$x - $y - $z";
}
// Функции могут возвращать функции
function bar ($x, $y) {
// Используйте 'use' для передачи внешних переменных
return function ($z) use ($x, $y) {
foo($x, $y, $z);
};
}
$bar = bar('A', 'B');
$bar('C'); // Prints "A - B - C"
// Вы можете вызывать именованные функции используя строки
$function_name = 'add';
echo $function_name(1, 2); // => 3
// Полезно для программного определения запущенной функции.
// Или используйте call_user_func(callable $callback [, $parameter [, ... ]]);
/********************************
* Включения
*/
<?php
// PHP код внутри включаемого файла должен начинаться с тега PHP.
include 'my-file.php';
// Код в файле my-file.php теперь доступен в текущем пространстве имен.
// Если файл не удалось подключить, то будет выдано предупреждение.
include_once 'my-file.php';
// Если код в файле my-file.php уже был подключен, он не будет подключен повторно.
// Это предотвращает ошибку повторного подключения файла.
require 'my-file.php';
require_once 'my-file.php';
// Same as include(), except require() will cause a fatal error if the
// file cannot be included.
// Действует также как и include(), но если файл не удалось подключить,
// функция выдает фатальную ошибку
// Содержимое файла my-include.php:
<?php
return 'Anything you like.';
// Конец файла
// Эти функции могут также возвращать значения.
$value = include 'my-include.php';
// Имена файлов содержат их путь в файловой системе, или если передано просто
// имя файла, PHP обращается к директиве include_path. Если файл не найден в
// include_path, предпринимается попытка поиска в папке, где выполняется скрипт
// или в текущей рабочей директории. Если не в одном из этих мест файл не
// найден - выдается ошибка
/* */
/********************************
* Классы
*/
// Классы определяются при помощи ключевого слова "class"
class MyClass
{
const MY_CONST = 'value'; // A constant
static $staticVar = 'static';
// Свойства объявляются с указанием их видимости
public $property = 'public';
public $instanceProp;
protected $prot = 'protected'; // Свойство доступно только потомкам и самому классу
private $priv = 'private'; // Свойство доступно только самому классу
// Конструктор описывается с помощью __construct
public function __construct($instanceProp) {
// Доступ к эземпляру класса с помощью $this
$this->instanceProp = $instanceProp;
}
// Методы объявляются как функции принадлежащие классу
public function myMethod()
{
print 'MyClass';
}
final function youCannotOverrideMe()
{
}
public static function myStaticMethod()
{
print 'I am static';
}
}
echo MyClass::MY_CONST; // Выведет 'value';
echo MyClass::$staticVar; // Выведет 'static';
MyClass::myStaticMethod(); // Выведет 'I am static';
// Новый экземпляр класса используя new
$my_class = new MyClass('An instance property');
// Если аргументы отсутствуют, можно не ставить круглые скобки
// Доступ к членам класса используя ->
echo $my_class->property; // => "public"
echo $my_class->instanceProp; // => "An instance property"
$my_class->myMethod(); // => "MyClass"
// Наследование классов используя "extends"
class MyOtherClass extends MyClass
{
function printProtectedProperty()
{
echo $this->prot;
}
// Переопределение родительского метода
function myMethod()
{
parent::myMethod();
print ' > MyOtherClass';
}
}
$my_other_class = new MyOtherClass('Instance prop');
$my_other_class->printProtectedProperty(); // => Выведет "protected"
$my_other_class->myMethod(); // Выведет "MyClass > MyOtherClass"
final class YouCannotExtendMe
{
}
// Вы можете использовать "магические методы" для создания геттеров и сеттеров
class MyMapClass
{
private $property;
public function __get($key)
{
return $this->$key;
}
public function __set($key, $value)
{
$this->$key = $value;
}
}
$x = new MyMapClass();
echo $x->property; // Будет использован метод __get()
$x->property = 'Something'; // Будет использован метод __set()
// Классы могут быть абстрактными (используя ключевое слово abstract)
// или реализовывать интерфейсы (используя ключевое слово implements).
// Интерфейсы определяются при помощи ключевого слова interface
interface InterfaceOne
{
public function doSomething();
}
interface InterfaceTwo
{
public function doSomethingElse();
}
// Интерфейсы могут быть расширены
interface InterfaceThree extends InterfaceTwo
{
public function doAnotherContract();
}
abstract class MyAbstractClass implements InterfaceOne
{
public $x = 'doSomething';
}
class MyConcreteClass extends MyAbstractClass implements InterfaceTwo
{
public function doSomething()
{
echo $x;
}
public function doSomethingElse()
{
echo 'doSomethingElse';
}
}
// Классы могут реализовывать более одного интерфейса
class SomeOtherClass implements InterfaceOne, InterfaceTwo
{
public function doSomething()
{
echo 'doSomething';
}
public function doSomethingElse()
{
echo 'doSomethingElse';
}
}
/********************************
* Трейты
*/
// Трейты появились в PHP 5.4 и объявляются при помощи ключевого слова trait
trait MyTrait
{
public function myTraitMethod()
{
print 'I have MyTrait';
}
}
class MyTraitfulClass
{
use MyTrait;
}
$cls = new MyTraitfulClass();
$cls->myTraitMethod(); // Напечатает "I have MyTrait"
/********************************
* Пространства имен
*/
// Это секция особая, ведь объявление пространства имен
// должно быть самым первым в файле. Позвольте сделать вид, что это не так
<?php
// По умолчанию, классы существуют в глобальном пространстве имен и могут быть
// вызваны с обратным слешем.
$cls = new \MyClass();
// Задание пространства имен файла
namespace My\Namespace;
class MyClass
{
}
// (из другого файла)
$cls = new My\Namespace\MyClass;
// Или внутри другого пространства имен.
namespace My\Other\Namespace;
use My\Namespace\MyClass;
$cls = new MyClass();
// Или вы можете создать псевдоним для пространства имен:
namespace My\Other\Namespace;
use My\Namespace as SomeOtherNamespace;
$cls = new SomeOtherNamespace\MyClass();
*/
```
## Смотрите также:
Посетите страницу [официальной документации PHP](http://www.php.net/manual/) для справки.
Если вас интересуют полезные приемы использования PHP посетите [PHP The Right Way](http://www.phptherightway.com/).
Если вы раньше пользовались языком с хорошей организацией пакетов, посмотрите [Composer](http://getcomposer.org/).
Для изучения стандартов использования языка посетите PHP Framework Interoperability Group's [PSR standards](https://github.com/php-fig/fig-standards).