Класс ReflectionMethod
(PHP 5, PHP 7)
Введение
Класс ReflectionMethod сообщает информацию о методах.
Обзор классов
Свойства
- name
-
Имя метода
- class
-
Имя класса
Предопределенные константы
Модификаторы ReflectionMethod
ReflectionMethod::IS_STATIC
-
Указывает на то, что это статический метод.
ReflectionMethod::IS_PUBLIC
-
Указывает на то, что это публичный метод.
ReflectionMethod::IS_PROTECTED
-
Указывает на то, что это защищённый метод.
ReflectionMethod::IS_PRIVATE
-
Указывает на то, что это приватный метод.
ReflectionMethod::IS_ABSTRACT
-
Указывает на то, что это абстрактный метод.
ReflectionMethod::IS_FINAL
-
Указывает на то, что это финализированный метод.
Содержание
- ReflectionMethod::__construct — Конструктор класса ReflectionMethod
- ReflectionMethod::export — Экспорт отраженного метода
- ReflectionMethod::getClosure — Возвращает динамически созданное замыкание для метода
- ReflectionMethod::getDeclaringClass — Получает класс, объявляющий отображенный метод
- ReflectionMethod::getModifiers — Получает модификаторы метода
- ReflectionMethod::getPrototype — Получает прототип метода (если такой есть)
- ReflectionMethod::invoke — Вызов
- ReflectionMethod::invokeArgs — Вызов метода с передачей аргументов массивом
- ReflectionMethod::isAbstract — Проверяет, является ли метод абстрактным
- ReflectionMethod::isConstructor — Проверяет, является ли метод конструктором
- ReflectionMethod::isDestructor — Проверяет, является ли метод деструктором
- ReflectionMethod::isFinal — Проверяет, может ли метод иметь наследников (final)
- ReflectionMethod::isPrivate — Проверяет, является ли метод частным (private)
- ReflectionMethod::isProtected — Проверяет, является ли метод защищенным (protected)
- ReflectionMethod::isPublic — Проверяет, является ли метод общедоступным (public)
- ReflectionMethod::isStatic — Проверяет, является ли метод статическим
- ReflectionMethod::setAccessible — Делает метод доступным
- ReflectionMethod::__toString — Возвращает строковое представление объекта Reflection method
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Введение
- Установка и настройка
- Предопределенные константы
- Примеры
- Расширение
- Класс Reflection
- Класс ReflectionClass
- Класс ReflectionZendExtension
- Класс ReflectionExtension
- Класс ReflectionFunction
- Класс ReflectionFunctionAbstract
- Класс ReflectionMethod
- Класс ReflectionObject
- Класс ReflectionParameter
- Класс ReflectionProperty
- ReflectionType
- ReflectionGenerator
- Интерфейс Reflector
- Класс ReflectionException
Коментарии
I have written a function which returns the value of a given DocComment tag.
Full example:
<?php
header('Content-Type: text/plain');
class Example
{
/**
* This is my DocComment!
*
* @DocTag: prints Hello World!
*/
public function myMethod()
{
echo 'Hello World!';
}
}
function getDocComment($str, $tag = '')
{
if (empty($tag))
{
return $str;
}
$matches = array();
preg_match("/".$tag.":(.*)(\\r\\n|\\r|\\n)/U", $str, $matches);
if (isset($matches[1]))
{
return trim($matches[1]);
}
return '';
}
$method = new ReflectionMethod('Example', 'myMethod');
// will return Hello World!
echo getDocComment($method->getDocComment(), '@DocTag');
?>
Maybe you can add this functionality to the getDocComment methods of the reflection classes.
Note that the public member $class contains the name of the class in which the method has been defined:
<?php
class A {public function __construct() {}}
class B extends A {}
$method = new ReflectionMethod('B', '__construct');
echo $method->class; // prints 'A'
?>
We can make a "Automatic dependenci injector" in classes when her constructors depends other classes (with type hint).
<?php
class Dependence1 {
function foo() {
echo "foo";
}
}
class Dependence2 {
function foo2() {
echo "foo2";
}
}
final class myClass
{
private $dep1;
private $dep2;
public function __construct(
Dependence1 $dependence1,
Dependence2 $dependence2
)
{
$this->dep1 = $dependence1;
$this->dep2 = $dependence2;
}
}
// Automatic dependence injection (CLASSES)
$constructor = new ReflectionMethod(myClass::class, '__construct');
$parameters = $constructor->getParameters();
$dependences = [];
foreach ($parameters as $parameter) {
$dependenceClass = (string) $parameter->getType();
$dependences[] = new $dependenceClass();
}
$instance = new myClass(...$dependences);
var_dump($instance);
?>
Results in:
object(myClass)#6 (2) {
["dep1":"myClass":private]=>
object(Dependence1)#4 (0) {
}
["dep2":"myClass":private]=>
object(Dependence2)#5 (0) {
}
}