1
0
mirror of https://github.com/danog/amp.git synced 2024-12-03 18:07:57 +01:00
amp/lib/CallableMaker.php

81 lines
2.6 KiB
PHP
Raw Normal View History

<?php
2016-08-30 01:29:21 +02:00
namespace Amp;
// @codeCoverageIgnoreStart
2016-08-30 01:29:21 +02:00
if (\PHP_VERSION_ID < 70100) {
/** @psalm-suppress DuplicateClass */
2018-06-18 20:00:01 +02:00
trait CallableMaker
{
2016-08-30 01:29:21 +02:00
/** @var \ReflectionClass */
private static $__reflectionClass;
2016-08-30 01:29:21 +02:00
/** @var \ReflectionMethod[] */
private static $__reflectionMethods = [];
2016-08-30 01:29:21 +02:00
/**
* Creates a callable from a protected or private instance method that may be invoked by callers requiring a
2016-08-30 01:29:21 +02:00
* publicly invokable callback.
*
* @param string $method Instance method name.
*
* @return callable
*
* @psalm-suppress MixedInferredReturnType
2016-08-30 01:29:21 +02:00
*/
2018-06-18 20:00:01 +02:00
private function callableFromInstanceMethod(string $method): callable
{
2016-08-30 01:29:21 +02:00
if (!isset(self::$__reflectionMethods[$method])) {
if (self::$__reflectionClass === null) {
self::$__reflectionClass = new \ReflectionClass(self::class);
}
self::$__reflectionMethods[$method] = self::$__reflectionClass->getMethod($method);
}
2016-08-30 01:29:21 +02:00
return self::$__reflectionMethods[$method]->getClosure($this);
}
2016-08-30 01:29:21 +02:00
/**
* Creates a callable from a protected or private static method that may be invoked by methods requiring a
* publicly invokable callback.
*
* @param string $method Static method name.
*
* @return callable
*
* @psalm-suppress MixedInferredReturnType
2016-08-30 01:29:21 +02:00
*/
2018-06-18 20:00:01 +02:00
private static function callableFromStaticMethod(string $method): callable
{
2016-08-30 01:29:21 +02:00
if (!isset(self::$__reflectionMethods[$method])) {
if (self::$__reflectionClass === null) {
self::$__reflectionClass = new \ReflectionClass(self::class);
}
self::$__reflectionMethods[$method] = self::$__reflectionClass->getMethod($method);
}
2016-08-30 01:29:21 +02:00
return self::$__reflectionMethods[$method]->getClosure();
}
}
} else {
/** @psalm-suppress DuplicateClass */
2018-06-18 20:00:01 +02:00
trait CallableMaker
{
2016-08-30 01:29:21 +02:00
/**
2016-08-30 17:22:10 +02:00
* @deprecated Use \Closure::fromCallable() instead of this method in PHP 7.1.
2016-08-30 01:29:21 +02:00
*/
2018-06-18 20:00:01 +02:00
private function callableFromInstanceMethod(string $method): callable
{
2016-08-30 01:29:21 +02:00
return \Closure::fromCallable([$this, $method]);
}
2016-08-30 01:29:21 +02:00
/**
2016-08-30 17:22:10 +02:00
* @deprecated Use \Closure::fromCallable() instead of this method in PHP 7.1.
2016-08-30 01:29:21 +02:00
*/
2018-06-18 20:00:01 +02:00
private static function callableFromStaticMethod(string $method): callable
{
2016-08-30 01:29:21 +02:00
return \Closure::fromCallable([self::class, $method]);
}
}
} // @codeCoverageIgnoreEnd