Context::find
(PHP 8.6+, True Async 1.0)
public Context::find(string|object $key): mixed
Recherche une valeur par clé dans le contexte courant. Si la clé n’est pas trouvée, la recherche continue
en remontant la hiérarchie des contextes parents. Retourne null si la valeur n’est trouvée à aucun niveau.
C’est une méthode de recherche sûre : elle ne lève jamais d’exception lorsqu’une clé est absente.
Paramètres
- key
- La clé à rechercher. Peut être une chaîne de caractères ou un objet. Lorsqu’un objet est utilisé comme clé, la recherche est effectuée par référence d’objet.
Valeur de retour
La valeur associée à la clé, ou null si la clé n’est trouvée dans le contexte courant
ni dans aucun contexte parent.
Exemples
Exemple #1 Recherche d’une valeur par clé de type chaîne
<?php
use function Async\current_context;
use function Async\spawn;
current_context()->set('request_id', 'abc-123');
spawn(function() {
// La coroutine enfant trouve la valeur dans le contexte parent
$id = current_context()->find('request_id');
echo $id . "\n"; // "abc-123"
// La recherche d'une clé inexistante retourne null
$missing = current_context()->find('nonexistent');
var_dump($missing); // NULL
});
Exemple #2 Recherche d’une valeur par clé objet
<?php
use function Async\current_context;
use function Async\spawn;
$loggerKey = new stdClass();
current_context()->set($loggerKey, new MyLogger());
spawn(function() use ($loggerKey) {
// Recherche par référence de clé objet
$logger = current_context()->find($loggerKey);
$logger->info('Message depuis la coroutine enfant');
});
Exemple #3 Recherche hiérarchique
<?php
use function Async\current_context;
use function Async\spawn;
// Niveau racine
current_context()->set('app_name', 'MyApp');
spawn(function() {
// Niveau 1 : ajout d'une valeur propre
current_context()->set('user_id', 42);
spawn(function() {
// Niveau 2 : recherche de valeurs de tous les niveaux
echo current_context()->find('user_id') . "\n"; // 42
echo current_context()->find('app_name') . "\n"; // "MyApp"
});
});
Voir aussi
- Context::get — Obtenir une valeur (lève une exception si absente)
- Context::has — Vérifier si une clé existe
- Context::findLocal — Rechercher uniquement dans le contexte local
- Context::set — Définir une valeur dans le contexte