Context::find

(PHP 8.6+, True Async 1.0)

public Context::find(string|object $key): mixed

Cerca un valore per chiave nel contesto corrente. Se la chiave non viene trovata, la ricerca continua risalendo la gerarchia dei contesti genitori. Restituisce null se il valore non viene trovato a nessun livello.

Questo e’ un metodo di ricerca sicuro: non lancia mai un’eccezione quando una chiave e’ assente.

Parametri

key
La chiave da cercare. Puo’ essere una stringa o un oggetto. Quando si utilizza un oggetto come chiave, la ricerca viene eseguita per riferimento all’oggetto.

Valore di ritorno

Il valore associato alla chiave, oppure null se la chiave non viene trovata nel contesto corrente o in nessun contesto genitore.

Esempi

Esempio #1 Ricerca di un valore per chiave stringa

<?php

use function Async\current_context;
use function Async\spawn;

current_context()->set('request_id', 'abc-123');

spawn(function() {
    // La coroutine figlia trova il valore dal contesto genitore
    $id = current_context()->find('request_id');
    echo $id . "\n"; // "abc-123"

    // La ricerca di una chiave inesistente restituisce null
    $missing = current_context()->find('nonexistent');
    var_dump($missing); // NULL
});

Esempio #2 Ricerca di un valore per chiave oggetto

<?php

use function Async\current_context;
use function Async\spawn;

$loggerKey = new stdClass();

current_context()->set($loggerKey, new MyLogger());

spawn(function() use ($loggerKey) {
    // Ricerca per riferimento alla chiave oggetto
    $logger = current_context()->find($loggerKey);
    $logger->info('Messaggio dalla coroutine figlia');
});

Esempio #3 Ricerca gerarchica

<?php

use function Async\current_context;
use function Async\spawn;

// Livello radice
current_context()->set('app_name', 'MyApp');

spawn(function() {
    // Livello 1: aggiunge il proprio valore
    current_context()->set('user_id', 42);

    spawn(function() {
        // Livello 2: cerca valori da tutti i livelli
        echo current_context()->find('user_id') . "\n";   // 42
        echo current_context()->find('app_name') . "\n";  // "MyApp"
    });
});

Vedi anche