Context::findLocal

(PHP 8.6+, True Async 1.0)

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

Sucht einen Wert anhand des Schluessels nur im aktuellen (lokalen) Kontext. Im Gegensatz zu find() durchsucht diese Methode nicht die Hierarchie der uebergeordneten Kontexte.

Gibt null zurueck, wenn der Schluessel auf der aktuellen Ebene nicht gefunden wird.

Parameter

key
Der zu suchende Schluessel. Kann ein String oder ein Objekt sein.

Rueckgabewert

Der mit dem Schluessel verknuepfte Wert im lokalen Kontext oder null, wenn der Schluessel nicht gefunden wird.

Beispiele

Beispiel #1 Unterschied zwischen find und findLocal

<?php

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

current_context()->set('config', 'global_value');

spawn(function() {
    current_context()->set('local_data', 'local_value');

    // find() sucht in der Hierarchie nach oben
    echo current_context()->find('config') . "\n";       // "global_value"

    // findLocal() sucht nur auf der aktuellen Ebene
    echo current_context()->findLocal('local_data') . "\n"; // "local_value"
    var_dump(current_context()->findLocal('config'));        // NULL
});

Beispiel #2 Verwendung mit einem Objekt-Schluessel

<?php

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

$parentKey = new stdClass();
$localKey = new stdClass();

current_context()->set($parentKey, 'parent_value');

spawn(function() use ($parentKey, $localKey) {
    current_context()->set($localKey, 'child_value');

    // Objekt-Schluessel vom Eltern-Kontext ist ueber findLocal nicht sichtbar
    var_dump(current_context()->findLocal($parentKey)); // NULL
    var_dump(current_context()->findLocal($localKey));  // "child_value"
});

Beispiel #3 Ueberschreiben eines Eltern-Werts

<?php

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

current_context()->set('timeout', 5000);

spawn(function() {
    // Pruefen, ob der Wert lokal ueberschrieben wurde
    if (current_context()->findLocal('timeout') === null) {
        // Vererbten Wert verwenden, kann aber ueberschrieben werden
        current_context()->set('timeout', 3000);
    }

    echo current_context()->findLocal('timeout') . "\n"; // 3000
});

Siehe auch