Context::find
(PHP 8.6+, True Async 1.0)
public Context::find(string|object $key): mixed
Шукає значення за ключем у поточному контексті. Якщо ключ не знайдено, пошук продовжується
вгору по ієрархії батьківських контекстів. Повертає null, якщо значення не знайдено на жодному рівні.
Це безпечний метод пошуку: він ніколи не кидає виключення при відсутності ключа.
Параметри
- key
- Ключ для пошуку. Може бути рядком або об’єктом. При використанні об’єкта як ключа пошук виконується за посиланням на об’єкт.
Значення, що повертаються
Значення, пов’язане з ключем, або null, якщо ключ не знайдено в поточному
чи будь-якому батьківському контексті.
Приклади
Приклад #1 Пошук значення за рядковим ключем
<?php
use function Async\current_context;
use function Async\spawn;
current_context()->set('request_id', 'abc-123');
spawn(function() {
// Дочірня корутина знаходить значення з батьківського контексту
$id = current_context()->find('request_id');
echo $id . "\n"; // "abc-123"
// Пошук неіснуючого ключа повертає null
$missing = current_context()->find('nonexistent');
var_dump($missing); // NULL
});
Приклад #2 Пошук значення за ключем-об’єктом
<?php
use function Async\current_context;
use function Async\spawn;
$loggerKey = new stdClass();
current_context()->set($loggerKey, new MyLogger());
spawn(function() use ($loggerKey) {
// Пошук за посиланням на ключ-об'єкт
$logger = current_context()->find($loggerKey);
$logger->info('Message from child coroutine');
});
Приклад #3 Ієрархічний пошук
<?php
use function Async\current_context;
use function Async\spawn;
// Кореневий рівень
current_context()->set('app_name', 'MyApp');
spawn(function() {
// Рівень 1: додаємо власне значення
current_context()->set('user_id', 42);
spawn(function() {
// Рівень 2: пошук значень з усіх рівнів
echo current_context()->find('user_id') . "\n"; // 42
echo current_context()->find('app_name') . "\n"; // "MyApp"
});
});
Дивіться також
- Context::get — Отримати значення (кидає виключення, якщо відсутнє)
- Context::has — Перевірити наявність ключа
- Context::findLocal — Пошук лише в локальному контексті
- Context::set — Встановити значення в контексті