Циклы в php

The PHP do…while Loop

The loop will always execute the block of code once, it will then check the condition, and repeat the loop while the specified condition is true.

The example below first sets a variable $x to 1 ($x = 1). Then, the do while loop will write some output, and then increment the variable $x with 1. Then the condition is checked (is $x less than, or equal to 5?), and the loop will continue to run as long as $x is less than, or equal to 5:


<?php $x = 1; do {  echo «The number is: $x <br>»;   $x++;} while ($x <= 5);?>

Note: In a loop the condition is tested AFTER executing the statements within the loop. This means that the loop will execute its statements at least once, even if the condition is false. See example below.

This example sets the $x variable to 6, then it runs the loop, and then the condition is checked:

Различные типы циклов в PHP

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

  1. while — перебирает блок кода, пока условие не станет истинным.
  2. do … while — блок кода выполняется один раз, а затем условие проверяется. Если условие истинно, выражение повторяется до тех пор, пока указанное условие истинно.
  3. for — перебирает блок кода, пока счетчик не достигнет указанного числа.
  4. foreach — проходит через блок кода для каждого элемента в массиве.

Цикл while в PHP

Оператор while будет циклически проходить по блоку кода, пока условие в операторе while будет равным true.

while(условие){
  // Код который нужно выполнять
}

Пример ниже создает цикл, который начинается с $i = 1. Цикл будет продолжать выполняться до тех пор, пока $i меньше или равен 3. Значение $i будет увеличиваться на 1 при каждом запуске цикла:

<?php
$i = 1;
while($i <= 3){
  $i++;
  echo "Number " . $i . "<br>";
}
?>

Цикл do … while в PHP

Цикл do-while является вариантом цикла while, который оценивает условие в конце каждой итерации цикла. В цикле do-while блок кода выполняется минимум один раз, а затем условие оценивается, если условие истинно, цикл повторяется до тех пор, пока указанное условие истинно.

do{
  // Код который выполнится как минимум 1 раз
}
while(условие);

В следующем примере определяется цикл, который начинается с $i = 1. Затем он увеличит $i на 1 и отобразит вывод. Затем условие оценивается и цикл продолжает выполняться, пока $i меньше или равно 3.

<?php
$i = 1;
do {
  $i++;
  echo "Number " . $i . "<br>";
}
while($i <= 3);
?>

Разница циклов while и do … while

Цикл while отличается от цикла do-while одним важным моментом — с циклом while проверяемое условие проверяется в начале каждой итерации цикла, поэтому, если условное выражение имеет значение false, цикл никогда не будет выполнен.

С другой стороны, в цикле do-while цикл всегда будет выполняться один раз, даже если условное выражение ложно, поскольку условие оценивается в конце итерации цикла, а не в начале.

Циклы for в PHP

Цикл for повторяет блок кода, пока не будет выполнено определенное условие. Обычно он используется для выполнения блока кода определенное количество раз.

for(инициализация; условие; инкремент){
  // Код который нужно выполнить
}

Параметры цикла for имеют следующие значения:

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

Пример ниже создает цикл, который начинается с $i = 1. Цикл будет продолжаться до тех пор, пока $i будет меньше или равно 3. Переменная $i будет увеличиваться на 1 при каждом запуске цикла:

<?php
for($i=1; $i<=3; $i++){
  echo "Number " . $i . "<br>";
}
?>

Цикл foreach в PHP

Цикл foreach обычно используется для перебора элементов массива (переводится как «для каждого»).

foreach($array as $value){
  // Код который нужно выполнить
}

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

<?php
$colors = array("Red", "Green", "Blue");

// Проходим по всем элементам массива
foreach($colors as $value){
  echo $value . "<br>";
}
?>

Существует еще один синтаксис цикла foreach, который является дополнением первого.

foreach($array as $key => $value){
  // Код который нужно выполнить
}

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

<?php
$superhero = array(
  "name" => "Vasya Pupkin",
  "email" => "vasyapupkin@mail.com",
  "age" => 18
);

// Проходим по массиву
foreach($superhero as $key => $value){
  echo $key . " : " . $value . "<br>";
}
?>

В результате вы увидите это:

name : Vasya Pupkin
email : vasyapupkin@mail.com
age : 18

Операторы цикла в PHP

Теперь давайте посмотрим, какие есть операторы цикла в PHP:

  • цикл
  • цикл
  • цикл
  • цикл

1. PHP цикл while

Вероятно, это самый простой цикл в PHP. Его синтаксис довольно прост:

while (условие) { // блок кода }

Блок кода будет выполняться до тех пор, пока условие будет истинным. Реализация нашего первого примера с циклом будет выглядеть так:

<?php
$i = 1;
while ($i <= 7) {
  echo " $i ";
  $i++;
}
?>

Результат будет точно таким же, как и в предыдущих примерах. Однако, если вы установите для переменной итератора значение 10 (), тогда ничего не будет выводиться, поскольку условие не будет выполняться. А если же вы забудете добавить итератору автоинкремент (увеличение на единицу после каждой итерации), это приведет к бесконечному выполнению цикла, поскольку условие никогда не изменится, и оно всегда будет истинным. Будьте внимательны с такими случаями.

2. PHP цикл do while

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

Это связано с тем, что в случае цикла PHP проверяет условие только после первой итерации. Это хорошо видно из синтаксиса:

<?php
do {
  //блок кода
} while (условие)
?>

А кроме этого данный цикл не сильно отличается от цикла . Ниже пример того, как использовать цикл :

<?php
$i = 1;
do {
  echo " $i ";
  $i++;
} while ($i <= 7)
?>

3. PHP цикл for

Цикл – это самый сложный цикл в PHP, но он также и наиболее часто используется. При использовании цикла вы выполняете инициализацию переменной цикла, делаете проверку условия, а затем обновление переменной цикла и все в одной строке. Синтаксис цикла следующий:

<?php
for ( выражение1; условие; выражение2 ) { // блок кода }
?>

Этот синтаксис требует немного больше объяснения.

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

Пример использования цикла выглядит так:

<?php
for($i = 1; $i <= 7; $i++) {
  echo " $i ";
}
?>

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

<?php
for( $i = 1, $a = 0; $i <= 7; print " $i ", $i++);
?>

4. PHP цикл foreach

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

Синтаксис цикла выглядит так:

<?php
foreach (array as $value) { // блок кода }
?>

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

<?php
// массив данных
$firstList = array(1, 2, 3, 4, 5, 6, 7);
// перебираем каждый элемент массива циклом foreach
foreach ($firstList as $value) {
  echo " $value ";
}
?>

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

<?php
foreach (array as $key => $value) {
  // блок кода
}
?>

В этом случае вы можете использовать обе информации (ключ и значение) в своем блоке кода следующим образом:

<?php
// массив данных
$firstList = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'f' => 6, 'g' => 7);
// перебираем каждый элемент массива циклом foreach
foreach ($firstList as $key => $value) {
  echo " $key-$value ";
}
?>

For döngüsü

For döngüsü belirli sayıda dönecek olan kodların kullanımında kullanışlıdır. For döngüsüne 3 parametre girilir. Birinci parametre döngüde kullanılacak olan değişkeni ve değerini tanımlar, ikinci parametre whilede olduğu gibi koşulu belirtir, üçüncü parametre ise her döndüğünde yapacağı işlemi belirtir.

for( başlangıç; koşul; her çalışmada olacak olan ) {
   // koşul doğru olduğu sürece çalışacak kod bloğu
}

Hemen örnek bir kullanım göstereyim:

for($sayi = 0; $sayi < 5; $sayi++) {
   echo ' Döngü ' . $sayi;
}

Ekranda az önce while örneğindeki çıktı ile aynı sonucu alırız. İlk parametrede $sayi değişkenine 0 değerini atadık, ikinci parametrede koşulu belirttik ve son paramterede ise her çalışmada sayı değişkenini bir arttırmasını söyledik. Sonuç olarak böyle belli sayıda dönmelerde for en idealidir.

Циклы

Циклы в PHP полезны, если вы хотите выполнить часть кода несколько раз, пока условие не примет значение false. Поэтому код выполняется несколько раз, пока условие оценивается как true, и как только условие оценивается как false, скрипт продолжает выполнение кода после цикла.

Следующая блок-схема объясняет, как циклы работают в PHP.

Как вы можете видеть на скриншоте выше, цикл содержит условие. Если условие принимает значение true, выполняется условный код. После выполнения условного кода управление возвращается к условию цикла, и поток продолжается до тех пор, пока условие не примет значение false.

В этом разделе мы рассмотрим различные типы циклов, поддерживаемых в PHP.

Цикл While

Цикл используется, если вы хотите выполнить часть кода несколько раз, пока условие не примет значение false.

Вы можете использовать его, как показано в следующем псевдокоде.

Давайте рассмотрим пример из жизни, чтобы понять, как работает цикл в PHP.

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

Цикл Do-While

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

Давайте посмотрим на синтаксис цикла .

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

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

Цикл For

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

Давайте посмотрим на синтаксис цикла .

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

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

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

For Each

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

Давайте рассмотрим несколько примеров.

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

Break ifadesi ile döngüleri durdurmak

Döngüleri sadece koşullar geçersiz olduğunda değil istersen break ifadesi ile istediğin yerde de durdurabilirsin. Örneğin deneme yanılma yolu ile çok uzun sürecek bir döngünün içindeyken aradığın şeyi bulduğunda döngünün daha fazla devam etmesini engelleyebilirsin.

Break türkçe anlamı kırmakdır. Yani döngüleri break ile istediğim yerde kırabiliriz. Hemen örnek bir kullanım gösterelim:

for($sayi = 0; $sayi < 100; $sayi++) {
   echo $sayi;
   if($sayi == 5) {
      break;
   }
}

Ekranda 012345 yazar.

Burada 100 kez dönecek olan bir for döngüsü yaptık ve her döndüğünde ekrana sayıyı yazmasını istedik. Ama aynı zamanda içine bir koşul daha koyduk, eğer sayi değişkeninin değeri 5 olur ise break ifadesini çalıştır. Yani 100’e kadar dönecek olan bir döngüyü break ile istediğimiz yerde durdurduk.

Şu ana kadar bu öğrendiklerimiz ile bile güzel ve işe yarar şeyler yapabilirsin. Mesela asal sayı hesaplama, hesap makinesi, kullanıcı ve üyelik sistemi, içerik listeleme sistemi vs. Bu bahsettiğim çalışmalarınıda örneğini ilerleyen zamanlarda yazılarımdan takip ederek bulabilirsin.

Bir sonraki PHP serüveninde görüşmek üzere hoşçakalın!

While döngüsü

While döngüsünün koşul olayı if ifadesi ile aynı diyebiliriz. İçerisine yazacağımız koşul doğru olduğunda kod bloğunu çalıştıran if ifadesinde olduğu gibi whilede aynı şeyi yapar. Tek farkı döngü olduğu için koşul doğru olduğu sürece tekrarlar.

while( koşul ) {
 // koşul olumlu olduğu sürece çalışacak kod bloğu
}

While döngüsünde sonsuz döngüye girmek çok kolay, bu yüzden kodlarken biraz dikkatli olmak lazım. Eğer koşul her zaman doğru olacak şekilde olursa while de hiç durmadan döner.

$sayi = 10;
while($sayi == 10) {
   echo 'sayi değişkeni 10 olduğu sürece bu yazı hep yazılacak';
}

Yukarıdaki örnek sonsuz döngüye girer, yani hatalıdır. Koşula $sayi değişkeni 10’a eşit olduğu sürece kod bloğunu ard arda çalıştır dedik. Döngüden önce $sayi değişkenine 10 değerini verdiğimiz için ve değerini hiç değiştirmediğimiz için döngü sonuza kadar döner.

Peki nasıl sınırlı ve kontrollü bir döngü yapacağız? Bu sorunun cevabıda gayet basit. Eğer döngü boyunca koşula yazdığımız değerlerin değişmesini sağlarsak döngüde belli bir dönüşten sonra durur. Hemen buna da bir örnek gösterelim.

$sayi = 0;
while($sayi < 5) {
   echo ' Döngü ' . $sayi;
   $sayi++;
}

Ekranda Döngü 0 Döngü 1 Döngü 2 Döngü 3 Döngü 4 yazar ve durur. Önce $sayi adında değişken oluşturup 0 değerini verdik, while döngümüzün koşulunada $sayi değişkeni 5 den küçük olduğu sürece dön dedik, kod bloğunun içerisine ise echo ile bir çıktı verdirdik ve hemen sonrasında $sayi değişkeninin değerini 1 arttırdık. Bu sayede her çalışmasında değer 1 artacak ve 5. çalışmasında duracaktır.

While için son örnek olarak birde matematiksel hesap yaptıralım:

$sayi = 1;
$sonuc = 1;

while($sayi < 10) {
   $sonuc = $sonuc * $sayi;
   $sayi++;
}

echo $sonuc;

Ekranda 362880 yazar. Burada $sonuc değişkenini her döngüde 1 arttırarak çarptık. Yani ilk olarak 1*1 sonrasında 1*2, sonra 2 * 3 … şeklinde sayı 10 dan küçük olana kadar çarptık.

Foreach döngüsü

Foreach döngüsüne array döngüsü diyebiliriz. Paramtere olarak bir dizi alır, ve dizi içindeki eleman sayısı kadar döner. Sadece bir dizi ve foreach döngüsü ile güzel bir listeleme yapabiliriz. Kullanımı diğer döngülerden farklı ama basittir.

Paramterede as deyiminden sonra yazdığımız değişkene her döngüde sırayla bir eleman değerini yükler.

foreach($dizi as $eleman) {
   // dizinin tum elemanlarının sayısı kadar döner
}

Örnek kullanım:

$meyveler = array('Elma', 'Armut', 'Portakal', 'Muz');

foreach($meyveler as $meyve) {
   echo $meyve . ' Yiyin! ';
}

Ekranda Elma Yiyin! Armut Yiyin! Portakal Yiyin! Muz Yiyin! yazar.

Dizide ne kadar eleman varsa hepsini sırayla parameterede belirttiğimiz $meyve değişkenine atayarak döndürür.

PHP for Loop

The loop repeats a block of code as long as a certain condition is met. It is typically used to execute a block of code for certain number of times.

for(initialization; condition; increment){     // Code to be executed }

The parameters of loop have following meanings:

  • — it is used to initialize the counter variables, and evaluated once unconditionally before the first execution of the body of the loop.
  • — in the beginning of each iteration, condition is evaluated. If it evaluates to , the loop continues and the nested statements are executed. If it evaluates to , the execution of the loop ends.
  • — it updates the loop counter with a new value. It is evaluate at the end of each iteration.

The example below defines a loop that starts with . The loop will continued until is less than, or equal to 3. The variable will increase by 1 each time the loop runs:

PHP циклы:

В PHP есть несколько циклов, а конкретно четыре, сейчас мы все их рассмотрим.

Цикл while:

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

PHP

1 2 3 4 5 6 7

$i=;// Создаём переменную и присваиваем ей ноль

  // Пишем цикл while

while($i<10){

echo$i.’ ‘;// Выводим переменную $i

$i++;// Увеличиваем переменную $i на один

}

Вот такой код получился, создаём переменную $i которую будим выводить на экран и увеличивать на один после каждой итерации цикла (Итерация — один проход по циклу), после ключевого слова while в круглых скобках обязательно пишем условие при которых будет работать цикл, в нашем случае, пока $i не станет равен 10.

Вот что вывелось на экран.

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

PHP

1 2 3 4 5 6 7

$i=;// Создаём переменную и присваиваем ей ноль

  // Пишем цикл while

while($i<10)

echo$i.’ ‘;// Выводим переменную $i

$i++;// Увеличиваем переменную $i на один

endwhile

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

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

PHP

1 2 3 4 5 6 7

$i=;// Создаём переменную и присваиваем ей ноль

  // Пишем цикл while бесконечным

while(true){

echo$i.’ ‘;// Выводим переменную $i

$i++;// Увеличиваем переменную $i на один

}

Как видите, что бы сделать его бесконечным, достаточно только в условие цикла, написать true, вот что получилось.

Также ещё делают переменную, а в цикли условие, при каких обстоятельствах переменная будет меняться на false, и если она равно false, то цикл заканчивается, как это сделать будет ниже.

Цикл do while:

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

PHP

1 2 3 4 5 6 7

$i=;// Создаём переменную и присваиваем ей ноль

  // Пишем цикл do while, в начале всегда пишем do

do{

echo$i.’ ‘;// Выводим переменную $i

$i++;// Увеличиваем переменную $i на один

}while($i<10);// Условие пишется в конце цикла

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

Цикл for:


Это наверное самый популярный цикл во многих языках программирования, но не в PHP, тем не менее, о нём рассказать надо.

PHP

1 2 3 4

// Пишем цикл for

for($i=;$i<10;$i++){

echo$i.’ ‘;// Выводим переменную $i

}

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

И так пока переменная не будет равна десяти, конечно, вам не обязательно создавать переменную или увеличивать её, вы можете вообще это не писать.

Также вы можете использовать другие операции и условия, к примеру, $i можете присвоит один и уменьшать её на один, пока переменная не будет равна нулю.

Ещё у этого цикла есть вид для верстальщиков.

PHP

1 2 3 4

// Пишем цикл for

for($i=;$i<10;$i++)

echo$i.’ ‘;// Выводим переменную $i

endfor;

Этот цикл тоже не особо популярен.

Цикл foreach:

Этот цикл очень популярен, но он сделан для работы с массивами, поэтому, рекомендую сначала прочитать часть про массивы (Ссылка на часть), потом уже переходить к циклу foreach.

Цикл foreach в PHP его синтаксис достаточно простой, их целых два, различие лишь в том, что один вариант не берёт ключ значения массива, а второй берёт, рассмотрим их оба.

PHP

1 2 3 4 5 6 7

// Объявление массива $arr

$arr=array(1,2,3,4);

  // Запуск цикла foreach

foreach($arras$value){

echo$value.’ ‘;// Вывод значений массива на экран

}

Вот результат.

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

Также можем получить ключ каждого значение, делается это так.

PHP

1 2 3 4 5 6 7

// Объявление массива $arr

$arr=array(80,12,44,15);

  // Запуск цикла foreach

foreach($arras$key=>$value){

echo$key.’ => ‘.$value.'</br>’;// Вывод ключа и значений массива на экран

}

Вот результат.

Как видите, слева показывается индекс (ключ) значения, а справа само значение, точно также как и переменная, ключ это переменная.

Также у foreach есть вид специально для верстальшиков.

PHP

1 2 3 4 5 6 7

// Объявление массива $arr

$arr=array(80,12,44,15);

  // Запуск цикла foreach для верстальшиков

foreach($arras$key=>$value)

echo$key.’ => ‘.$value.'</br>’;// Вывод ключа и значений массива на экран

endforeach

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

Do … While Döngüsü

Bu döngü diğerleri gibi pek fazla kullanılmaz, ama yine de bilmekte fayda var. Do While döngüsü aslında While döngüsünün koşul olayı ile aynı tek farkı; döngü koşul geçerli olsun ya da olmasın en az 1 kere çalışır. yani kod bir kere çalıştıktan sonra 2. dönmede koşulu kontrol eder, tüm espirisi budur.

do
{
   // 1 kez çalışıp sonradan koşul ile dönecek olan kod bloğu
}
while ( koşul );

Örnek kullanım:

$sayi = 20;

do
{
   echo 'Selam Dünya!';
}
while ( $sayi < 10 );

Ekranda 1 kez Selam Dünya! yazar.

Aslında while yazdığımız koşul geçersiz. Yani $sayi değişkeni 10 dan küçük değil ama do while döngüsünde koşula bakılamdan önce 1 kere çalıştırıldığı için kod bir kez çalıştırlacaktır.


С этим читают