PHPackages                             somethinganotherbeer/methodborrow - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. somethinganotherbeer/methodborrow

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

somethinganotherbeer/methodborrow
=================================

Library for borrow methods from classes

00PHP

Since Jun 30Pushed todayCompare

[ Source](https://github.com/SomethingAnotherBeer/MethodBorrowLibrary)[ Packagist](https://packagist.org/packages/somethinganotherbeer/methodborrow)[ RSS](/packages/somethinganotherbeer-methodborrow/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

MethodBorrowLibrary
===================

[](#methodborrowlibrary)

Библиотека для заимствования методов из классов.

Описание
--------

[](#описание)

### Основные классы приложения

[](#основные-классы-приложения)

#### Context (Somethinganotherbeer\\Methodborrow\\Context)

[](#context-somethinganotherbeermethodborrowcontext)

В данном классе реализуется метод Context::borrowMethodFromClass(string $classname, string $method\_name). Посредством которого мы получаем экземпляр класса ContextMethod. Экземпляр данного класса при создании принимает объект конфигурации, который мы рассмотрим позже.

#### ContextMethod (Somethinganotherbeer\\Methodborrow\\ContextMethod)

[](#contextmethod-somethinganotherbeermethodborrowcontextmethod)

Экземпляр данного класса возвращается при успешном выполнении Context::borrowMethodFromClass(string $classname, string $method\_name). Реализует метод \_\_invoke с переменным кл-вом аргументов, посредством которого осуществляется проксирование к ReflectionMethod::invoke ранее указанного метода с передачей ему этих аргументов. Имеется возможность использовать методы bind и bindArgs, первый из которых биндит аргументы, которые будут передаваться автоматически при вызове \_\_invoke без их указания в вызове. bind принимает одиночное значение, а bindArgs принимает массив значений. Можно очистить забинженные аргументы посредством вызова clear()

### Конфигурация

[](#конфигурация)

Конфигурация представляет собой переменную ассоциативного массива, ключами которого являются полностью квалифицированные имена классов. Каждое значение, привязанное к ключу по имени класса, должно представлять собой массив, содержащий два возможных ключа: implementation\_list и replacement\_list, каждое из которых представляет собой массив, содержащий массив массивов со следующими возможными значениями для:

1. implementation\_list - \[...\['implementation\_name' =&gt; {string}, 'implementation\_value' =&gt; {string}\]\]
2. replacement\_list - \[...\['replacement\_name' =&gt; {string}, 'replacement\_value' =&gt; {mixed}\]\]

Массив по ключу implementation\_list должен содержать значения для реализации. Если в классе, указанном в первом аргументе Context::borrowMethodFromClass(string $classname, string $method\_name), в качестве свойства, инициализируемого в конструкторе, используется абстрактный класс или интерфейс. По ключу implementation\_name указывается наименование абстрактного класса/интерфейса, а по ключу implementation\_value указывается его реализация. При этом, класс, указанный в implementation\_value, должен действительно реализовывать абстрактный класс/интерфейс, указанный в implementation\_name.

Массив по ключу replacement\_list должен содержать значения для встроенных аргументов. Если конструктор указанного класса содержит сигнатуру встроенного типа без дефолтного значения, например int, float и т.д, то мы не можем взять этот параметр из ниоткуда. Его значение необходимо прописать в подмассиве массива replacement\_name следующим образом - \['replacement\_name' =&gt; '{Наименование аргумента}, 'replacement\_value' =&gt; {значение аргумента}\]. Если же конструктору класса передаются значения по умолчанию для встроенного типа, то все ок.

### Пример использования вместе с конфигурацией

[](#пример-использования-вместе-с--конфигурацией)

```
class One
{
    private SomeInterface $innerInstance;
    private Three $three;
    private int $someValue;

    public function __construct(SomeInterface $innerInstance, Three $three, int $someValue)
    {
        $this->innerInstance = $innerInstance;
        $this->three = $three;
        $this->someValue = $someValue;

    }

    public function doSomething(int $arg): int
    {
        return $arg * $arg;
    }
}

interface SomeInterface
{

}

class Two implements SomeInterface
{

}

class Three
{
    private Four $four;

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

class Four
{

}

$configuration =
[
    'One' =>
    [
        'implementation_list' =>
        [
            [
                'implementation_name' => 'SomeInterface',
                'implementation_value' => 'Two'
            ],
        ],
        'replacement_list' =>
        [
            [
                'replacement_name' => 'someValue',
                'replacement_value' => 5,
            ],
        ],
    ],
];

$confFactory = ConfFactory::makeInstance();
$classConfList = $confFactory->makeClassConfList($configuration);
$context = Context::makeInstance($classConfList);

$method = $context->borrowMethodFromClass(One::class, 'doSomething');

$method(5) // 25

$method->bind(5);
$method() // 25
$method->clear();
$method() // получим ошибку, так как нет забинженных аргументов
```

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/b4489a905502e8b1089422ff840fc70aed9096437a028132576f9b10f98195c2?d=identicon)[SomethingAnotherBeer](/maintainers/SomethingAnotherBeer)

### Embed Badge

![Health badge](/badges/somethinganotherbeer-methodborrow/health.svg)

```
[![Health](https://phpackages.com/badges/somethinganotherbeer-methodborrow/health.svg)](https://phpackages.com/packages/somethinganotherbeer-methodborrow)
```

###  Alternatives

[silverstripe/multiform

SilverStripe forms with multiple steps, flow control and state persistence

3156.8k3](/packages/silverstripe-multiform)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
