Title: ClassDiscovery::findOneByType
Published: May 20, 2026

---

# ClassDiscovery::findOneByType( string $type ): string|Closure

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#related)

[ Back to top](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#wp--skip-link--target)

Finds a class.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#parameters)󠁿

 `$type`stringrequired

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#return)󠁿

 string|Closure

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#source)󠁿

    ```php
    protected static function findOneByType($type)
    {
        // Look in the cache
        if (null !== $class = self::getFromCache($type)) {
            return $class;
        }
        static $skipStrategy;
        $skipStrategy ?? $skipStrategy = self::safeClassExists(Strategy\GeneratedDiscoveryStrategy::class) ? \false : Strategy\GeneratedDiscoveryStrategy::class;
        $exceptions = [];
        foreach (self::$strategies as $strategy) {
            if ($skipStrategy === $strategy) {
                continue;
            }
            try {
                $candidates = $strategy::getCandidates($type);
            } catch (StrategyUnavailableException $e) {
                if (!isset(self::$deprecatedStrategies[$strategy])) {
                    $exceptions[] = $e;
                }
                continue;
            }
            foreach ($candidates as $candidate) {
                if (isset($candidate['condition'])) {
                    if (!self::evaluateCondition($candidate['condition'])) {
                        continue;
                    }
                }
                // save the result for later use
                self::storeInCache($type, $candidate);
                return $candidate['class'];
            }
            $exceptions[] = new NoCandidateFoundException($strategy, $candidates);
        }
        throw DiscoveryFailedException::create($exceptions);
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/php-ai-client/third-party/http/discovery/classdiscovery.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php#L41)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php#L41-L75)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/findonebytype/?output_format=md#related)󠁿

| Uses | Description | 
| [ClassDiscovery::safeClassExists()](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/safeclassexists/)`wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php` |

We need a “safe” version of PHP’s “class_exists” because Magento has a bug (or they call it a “feature”). Magento is throwing an exception if you do class_exists() on a class that ends with “Factory” and if that file does not exits.

  | 
| [ClassDiscovery::evaluateCondition()](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/evaluatecondition/)`wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php` |

Evaluates conditions to boolean.

  | 
| [ClassDiscovery::storeInCache()](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/storeincache/)`wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php` |

Store a value in cache.

  | 
| [ClassDiscovery::getFromCache()](https://developer.wordpress.org/reference/classes/wordpress-aiclientdependencies-http-discovery-classdiscovery/getfromcache/)`wp-includes/php-ai-client/third-party/Http/Discovery/ClassDiscovery.php` |

Get a value from cache.

  |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwordpress-aiclientdependencies-http-discovery-classdiscovery%2Ffindonebytype%2F)
before being able to contribute a note or feedback.