Рубрики
Uncategorized

Пример внедрения зависимостей для рефлексивного обучения Php

Автор оригинала: David Wong.

Эта статья иллюстрирует внедрение зависимостей в PHP-рефлексивное обучение. Поделитесь для вашей справки следующим образом:

Сначала посмотрите на код:

php
if (PHP_SAPI != 'cli') {
  exit('Please run it in terminal!');
}
if ($argc < 3) {
  exit('At least 2 arguments needed!');
}
$controller = ucfirst($argv[1]) . 'Controller';
$action = 'action' . ucfirst($argv[2]);
// Check for class existence
if (!class_exists($controller)) {
  exit("Class $controller does not existed!");
}
// Get the reflection of the class
$reflector = new ReflectionClass($controller);
// Check if the method exists
if (!$reflector->hasMethod($action)) {
  exit("Method $action does not existed!");
}
// Class-taking constructors
$constructor = $reflector->getConstructor();
// Take the parameters of the constructor
$parameters = $constructor->getParameters();
// ergodic parameters
foreach ($parameters as $key => $parameter) {
  // Get the class of parameter declaration
  $injector = new ReflectionClass($parameter->getClass()->name);
  // Instantiate the parameter declaration class and fill in the parameter list
  $parameters[$key] = $injector->newInstance();
}
// Use the parameter list instance controller class
$instance = $reflector->newInstanceArgs($parameters);
// Implementation
$instance->$action();
class HelloController
{
  private $model;
  public function __construct(TestModel $model)
  {
    $this->model = $model;
  }
  public function actionWorld()
  {
    echo $this->model->property, PHP_EOL;
  }
}
class TestModel
{
  public $property = 'property';
}

(Приведенный выше код не является оригинальным) Сохраните приведенный выше код как run.php

Режим работы, выполняемый в терминале php run.php Привет, Мир

Как вы можете видеть, мы собираемся выполнить Мировое действие под управлением HelloController. Конструктору HelloController требуется объект типа Тестовая модель.

Благодаря отражению PHP мы реализуем автоматическую инъекцию объектов TestModel.

Приведенный выше пример аналогичен процессу распределения запросов, который является частью распределения запросов маршрутизации, если мы хотим получить адрес запроса, такой как:/Hello/World

Это означает выполнение метода Мирового действия под управлением HelloController.

Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы PHP и использования операторов, Краткое описание использования строк Php и данных php+mysql. Введение в Библиотечные операции и Краткое описание общих навыков работы с базами данных на PHP

Я надеюсь, что эта статья будет полезна для разработки программ на PHP для всех.

Оригинал: “https://developpaper.com/an-example-of-dependency-injection-for-php-reflective-learning/”