Раздел вопрос-ответ Как получить имена параметров из конструктора класса на php?

Как получить имена параметров из конструктора класса на php?

Например, для следующих php-классов для первого нужно получить 'siteId', а для второго 'param1', 'param2'. Вроде бы можно это сделать с помощью рефлексии (ReflectionClass), но как?

class Example
{
	private $siteId;

	public function __construct($siteId)
	{
		$this->siteId = $siteId;
	}
}

class Example2
{
	public function __construct($param1, $param2)
	{
		
	}
}

Это нужно для универсального запуска тасков из админки. Таски представлены в виде php-классов, конструкторы которых могут отличаться. Поэтому хочется универсальное получение параметров конструктора различных классов.

share

1 ответ

Получить параметры конструктора php-класса, используя рефлексию:

$reflectionClass = new ReflectionClass('ExampleClass');
$parameters = $reflectionClass->getConstructor()->getParameters();

Для вашего примера получение параметров конструктора:

$taskParameters = array();
foreach (array('Example', 'Example2') as $taskName) {
	$taskParameters[$taskName] = array();
	$reflectionClass = new ReflectionClass($taskName);
	if ($reflectionClass->getConstructor()) {
		$parameters = $reflectionClass->getConstructor()->getParameters();

		foreach ($parameters as $reflectionParameter) {
			$taskParameters[$taskName][] = $reflectionParameter->getName();
		}
	}
}

var_dump($taskParameters);
exit; 

//переменная $taskParameters содержит имена параметров конструкторов:
array(2) {
  ["Example"]=>
  array(1) {
    [0]=>
    string(6) "siteId"
  }
  ["Example2"]=>
  array(2) {
    [0]=>
    string(6) "param1"
    [1]=>
    string(6) "param2"
  }
}

Т.о. мы на php получили параметры конструкторов классов. А точнее, имена параметров. Насколько я понял, вопрос был про имена параметров.

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться