← А хіба current() та end() вже не справляються?
docs: English JsonRpcBundle docs, REST and MCP Bundle sections, package cards
uk/articles/from-tg/php/array-first-last.md
новий файл +69
−0
1
+
# А хіба current() та end() вже не справляються?
2
+
3
+
На одній з персональних консультацій ми з одним з читачів обговорювали [статтю про нововведення в PHP 8.5](https://sensiolabs.com/blog/2025/new-in-php-85), зокрема появу функцій `array_first()` та `array_last()`.
4
+
5
+
У нього виникло питання:
6
+
7
+
> “А навіщо це потрібно, якщо є current() і end()?”
8
+
9
+
І раптом я подумав, що це питання може виникнути не тільки в нього, бо може здатися, що `current()` та `end()` роблять те саме.
10
+
11
+
Тому я вирішив коротко розкласти все по поличках.
12
+
13
+
## Що насправді роблять current() та end()
14
+
15
+
Функція `current()` справді повертає перший елемент, а `end()` — останній елемент масиву, але тільки після того, як зрушують внутрішній вказівник масиву. Це означає, що:
16
+
17
+
```php
18
+
$array = ['a', 'b', 'c', 'd'];
19
+
20
+
echo current($array); // 'a'
21
+
22
+
echo next($array); // 'b'
23
+
echo current($array); // 'b', а не 'a'
24
+
25
+
echo end($array); // 'd'
26
+
echo current($array); // 'd' а не 'a'
27
+
```
28
+
29
+
Тобто функція `current()` повертає не перший елемент масиву, а той, на який вказує вказівник, а `end()` — останній елемент масиву, але при цьому переставляє на нього внутрішній вказівник масиву, що в свою чергу може призвести до непередбачуваних наслідків.
30
+
31
+
Концептуальний приклад: ми хочемо вивести всі елементи масиву, якщо останній елемент не "d".
32
+
33
+
```php
34
+
$array = ['a', 'b', 'c'];
35
+
36
+
if (end($array) !== 'd') { // але вказівник вже перемістився на 'c'
37
+
while ($item = current($array)) {
38
+
echo $item . PHP_EOL;
39
+
next($array);
40
+
}
41
+
}
42
+
```
43
+
44
+
Але на екран виведеться тільки 'c'.
45
+
46
+
## array_first() та array_last() — декларативні та передбачувані
47
+
48
+
Нові функції будуть завжди повертати перше або останнє значення без побічних ефектів.
49
+
50
+
Вони не змінюють стан вказівника і не залежать від нього:
51
+
52
+
```php
53
+
$array = ['a', 'b', 'c'];
54
+
55
+
array_first($array); // 'a'
56
+
array_last($array); // 'c'
57
+
58
+
// Незалежно від вказівника
59
+
next($array);
60
+
array_first($array); // все ще 'a'
61
+
```
62
+
63
+
PHP продовжує розвиватися в бік декларативного і безпечного коду, і ці нові функції — це не "зайве", а ще один крок до меншої кількості багів.
64
+
65
+
Якщо помітили у себе в коді `current()` чи `end()` — можливо, час подивитись на них під новим кутом.
66
+
67
+
---
68
+
69
+
*Вперше опубліковано в Telegram-каналі [«Створений щоб помирати»](https://t.me/php_while_true/44) 25.06.2025.*