Context::findLocal

(PHP 8.6+, True Async 1.0)

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

현재 (로컬) 컨텍스트에서 키로 값을 검색합니다. find()와 달리 이 메서드는 부모 컨텍스트의 계층 구조를 따라 올라가며 검색하지 않습니다.

현재 수준에서 키를 찾지 못하면 null을 반환합니다.

매개변수

key
검색할 키. 문자열 또는 객체가 가능합니다.

반환값

로컬 컨텍스트에서 키와 연관된 값, 또는 키를 찾지 못한 경우 null.

예제

예제 #1 find와 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() searches up the hierarchy
    echo current_context()->find('config') . "\n";       // "global_value"

    // findLocal() searches only at the current level
    echo current_context()->findLocal('local_data') . "\n"; // "local_value"
    var_dump(current_context()->findLocal('config'));        // NULL
});

예제 #2 객체 키 사용

<?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');

    // Object key from parent is not visible through findLocal
    var_dump(current_context()->findLocal($parentKey)); // NULL
    var_dump(current_context()->findLocal($localKey));  // "child_value"
});

예제 #3 부모 값 오버라이딩

<?php

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

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

spawn(function() {
    // Check if the value is overridden locally
    if (current_context()->findLocal('timeout') === null) {
        // Use inherited value, but can override
        current_context()->set('timeout', 3000);
    }

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

같이 보기