Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
Forwarded from Proglib.academy | IT-курсы
Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science.
В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.
Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.4. Чему равно выражение array_is_list([0 => 'a', 2 => 'b'])?
Anonymous Quiz
36%
true
57%
false
4%
null
3%
TypeError
Forwarded from Библиотека программиста
Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?
Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.
В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.4. В WeakMap есть один ключ-объект со значением 123. После unset последней обычной ссылки на объект что вернёт count($map)?
Anonymous Quiz
39%
0
25%
1
26%
null
10%
Ошибка
PHP 8.4. Что выведет код?
<?php
$left = ['timeout' => 10];
$right = ['timeout' => 20];
$union = $left + $right;
$merged = array_merge($left, $right);
echo $union['timeout'], ' ', $merged['timeout'];
👾 — 20 20
👍 — 10 20
🥰 — 10 10
⚡️ — Ошибка: массивы нельзя складывать
Оператор + объединяет массивы по ключам и при совпадении сохраняет значение из левого массива. array_merge для одинаковых строковых ключей берёт значение из более позднего массива. Здесь ключ timeout строковый: правила перенумерации числовых ключей не участвуют.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: Array - Manual
Array Operators
👍8
До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.
Например, можно совместить:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽
Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога.
Please open Telegram to view this post
VIEW IN TELEGRAM
PHP 8.4. Что выведет код?
<?php
$data = ['token' => null];
var_dump(isset($data['token']));
var_dump(array_key_exists('token', $data));
👾 — true, затем true
👍 — true, затем false
🥰 — false, затем false
⚡️ — false, затем true
isset возвращает false, если значение равно null. array_key_exists проверяет наличие самого ключа, а не значение под ним. Ключ token существует, хотя в нём хранится null.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: isset - Manual
Determine if a variable is declared and is different than null
⚡11
PHP 8.4. Что выведет код?
<?php
$value = 10;
$arrow = fn() => $value;
$reference = function () use (&$value) {
return $value;
};
$value = 20;
echo $arrow(), ' ', $reference();
👾 — 10 20
👍 — 20 20
🥰 — 10 10
⚡️ — Ошибка компиляции
Стрелочная функция автоматически захватывает внешнюю переменную по значению: для arrow сохраняется число 10. Замыкание с use (&$value) захватывает переменную по ссылке и при вызове видит уже 20. В задаче используется число, а не объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: Arrow Functions - Manual
👾4
PHP 8.4. Что выведет код?
<?php
class Profile {
public string $name = 'Ann';
}
class User {
public Profile $profile;
}
$original = new User();
$original->profile = new Profile();
$copy = clone $original;
$copy->profile->name = 'Bob';
echo $original->profile->name;
👾 — Ann
👍 — Ошибка: вложенный объект нельзя менять
🥰 — Bob
⚡️ — Ошибка: clone запрещён без __clone
Без дополнительной логики __clone выполняется поверхностное копирование свойств. original и copy — разные объекты User, но их свойства profile указывают на один Profile. Изменение его name видно через оба контейнера. Для независимого Profile его нужно клонировать отдельно.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2⚡1🥰1
В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.
Например, можно совместить два направления по работе с ИИ:
💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.
А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога.
Акция действует до 31 октября включительно
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱2
PHP 8.4. Что выведет код?
<?php
$value = '1';
$result = match ($value) {
1 => 'integer',
'1' => 'string',
default => 'other',
};
echo $result;
👾 — integer
👍 — string
🥰 — other
⚡️ — UnhandledMatchError
match сравнивает значение с вариантами строго, как оператор ===. Строка '1' не равна целому числу 1 при таком сравнении. Совпадает вторая ветка, поэтому результат — string.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: match - Manual
👍11
PHP 8.4. Что выведет код?
<?php
class User {
public string $name = 'Ann';
}
class Box {
public function __construct(
public readonly User $user
) {}
}
$box = new Box(new User());
$box->user->name = 'Bob';
echo $box->user->name;
👾 — Ошибка: readonly запрещает любое изменение
👍 — Ann
🥰 — Ошибка: readonly нельзя применять к объектам
⚡️ — Bob
readonly запрещает после инициализации переназначать свойство user, но не делает сам объект User неизменяемым. Изменение его обычного свойства name допустимо. А присваивание $box->user = new User() после инициализации привело бы к Error.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: Properties - Manual
⚡6👾3
PHP 8.4. Что выведет код?
<?php
$values = [1, 2, 3];
foreach ($values as &$value) {
}
foreach ($values as $value) {
}
echo implode(',', $values);
👾 — 1,2,3
👍 — 1,2,2
🥰 — 3,3,3
⚡️ — Ошибка выполнения
После первого цикла $value остаётся ссылкой на последний элемент массива. Второй цикл присваивает ей очередные значения и тем самым меняет этот элемент. Чтобы убрать связь, после цикла по ссылке нужно вызвать unset($value).
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: foreach - Manual
👍5
PHP 8.4. Что выведет код?
<?php
$values = [0, 1, 2];
$filtered = array_filter(
$values,
fn($value) => $value > 0
);
echo json_encode($filtered), "\n";
echo json_encode(array_values($filtered));
👾 — [1,2], затем [1,2]
👍 — {"0":1,"1":2}, затем [1,2]
🥰 — {"1":1,"2":2}, затем [1,2]
⚡️ — {"1":1,"2":2}, затем тот же объект
array_filter сохраняет ключи. После удаления нулевого элемента остаются ключи 1 и 2, поэтому json_encode создаёт объект. Функция array_values заново нумерует элементы с нуля — после неё получается JSON-массив.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: array_filter - Manual
Filters elements of an array using a callback function
🥰6
PHP 8.4. Что выведет код?
<?php
$values = [10, 20];
var_dump(in_array('10', $values));
var_dump(in_array('10', $values, true));
👾 — false, затем false
👍 — true, затем true
🥰 — false, затем true
⚡️ — true, затем false
По умолчанию in_array использует нестрогое сравнение: числовая строка '10' совпадает с числом 10. Третий аргумент true включает проверку типа. Строка и целое число тогда не совпадают.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: in_array - Manual
Checks if a value exists in an array
⚡6🥱2
PHP 8.4. Что выведет код?
<?php
$value = '0';
var_dump(empty($value));
var_dump($value === '');
👾 — true, затем false
👍 — false, затем false
🥰 — true, затем true
⚡️ — false, затем true
Проверка empty считает строку '0' пустым значением, потому что при преобразовании в bool она даёт false. Строгое сравнение с '' проверяет именно пустую строку. Строка '0' содержит один символ, поэтому результат — false.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: empty - Manual
Determine whether a variable is empty
👍5👾3
PHP 8.4. Что выведет код?
<?php
function prepare(): int {
echo "prepare\n";
return 1;
}
$item = null;
$result = $item?->run(prepare());
var_dump($result);
👾 — prepare, затем NULL
👍 — Только NULL
🥰 — Ошибку вызова метода у null
⚡️ — Ничего
Оператор ?-> останавливает вычисление, если слева находится null. До вызова метода и вычисления его аргументов дело не доходит. Поэтому prepare() не выполняется, а результат выражения равен null.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: The Basics - Manual
👍3⚡1
PHP 8.4. Что выведет код?
<?php
class Base {
public static function name(): string {
return 'B';
}
public static function show(): void {
echo self::name(), static::name();
}
}
class Child extends Base {
public static function name(): string {
return 'C';
}
}
Child::show();
👾 — BB
👍 — CC
🥰 — BC
⚡️ — CB
self:: обращается к классу, в котором написан метод show, — это Base. Вызов через static:: учитывает класс, через который вызвали метод. Здесь это Child, поэтому выбирается его реализация name.
Please open Telegram to view this post
VIEW IN TELEGRAM
www.php.net
PHP: Late Static Bindings - Manual
🥰3⚡1