Как добавить строку в метод файла класса в php? - PullRequest
0 голосов
/ 17 октября 2018

Я создаю команду cli в Laravel, и мне нужно добавить следующую строку кода:

$this->app->register('App\Providers\AccountingRepositoryServiceProvider');

к методу, например register, внутри уже существующего файла класса php, например так: app / Providers / AppServiceProvider.php

<?php

namespace App\Providers;

use ...

class AppServiceProvider extends ServiceProvider
{

    ...

    public function register()
    {

        ...

    }

    ...
}

Каков наилучший способ сделать это?Делать это с помощью Laravel или чистого PHP не имеет значения.

Основная цель - добавить строку внутри файла в определенную позицию.

Возможно ли это с помощью регулярных выражений?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Ну, я решаю это с помощью регулярного выражения, как это:

/function register\(.*\)\s*{/

Сначала я нахожу позицию первой строки метода в классе по preg_match (с флагом PREG_OFFSET_CAPTURE, чтобы иметьposition), а затем вставьте код в эту позицию с помощью substr_replace (с нулевой длиной для эффекта вставки):

preg_match('/function register\(.*\)\s*{/', $classFileContent, $matches, PREG_OFFSET_CAPTURE);
$firstLinePos = strlen($matches[0][0]) + $matches[0][1];
$newClassFileContent = substr_replace($classFileContent, $codeToInsert, $firstLinePos, 0);
0 голосов
/ 17 октября 2018

Вот замечательный пакет для композиторов, который может генерировать все, что вам нужно в ваших классах, прямо здесь: https://github.com/nette/php-generator

Это тоже довольно просто использовать, проверьте это в документации:

<?php

$class = new Nette\PhpGenerator\ClassType('Demo');

$class
    ->setFinal()
    ->setExtends('ParentClass')
    ->addImplement('Countable')
    ->addTrait('Nette\SmartObject')
    ->addComment("Description of class.\nSecond line\n")
    ->addComment('@property-read Nette\Forms\Form $form');

// to generate PHP code simply cast to string or use echo:
echo $class;

Просто сохраните строку $class в файл!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...