将自定义方法参数绑定到类属性

问题描述 投票:0回答:1

是否有任何方法可以将类属性绑定到该类内的方法参数,以便在单击 CTRL + 右键单击时存在双向链接?

class Attachments extends Repository
{
    public Documents $documents;

    public function fromDocuments(callable $scope)
    {
        $this->scopeOnRepoProperty($scope, 'documents');
    }
}

我的意思是,在这种情况下,

documents
方法中的第二个参数
scopeOnRepoProperty()
应该引用属性
$documents

更广泛的背景:

对我来说,问题是很大一部分代码非常相似,即大多数方法scopeXXX/fromXXX都会执行类似的操作,执行该方法并将属性存储库作为参数发送给它。即在上面的例子中,

$scope($this->documents)
被执行; 另外,如果
$this->documents
未初始化,则会创建一个新实例。

所以看起来:

public function fromDocuments(callable $scope)
{
    if (!isset($this->documents)) {
        $this->documents = new Documents();
    }
    $scope($this->documents);
}

我不想每次都编写 if、创建一个新对象并调用一个方法,我想出了一个想法,我可以用一个方法来实现这一点,该方法将接受一个可调用对象以及该属性的名称和类型反射类名。

代码工作正常,不幸的是我因此失去了这些属性的绑定。 在以前的版本中它是 $this->documents,所以链接在那里,但现在它不在那里。

我想知道是否有什么方法可以实现这一目标。有什么想法吗?

php phpstorm
1个回答
0
投票

我想避免每次都写 if

    $scope($this->documents ??= new Documents());

这引用了属性以及您想要在那里使用的类。这通常比使用代表两者的字符串更好(并且还失去了对具体属性和具体类名的引用)。

你在那里所做的也称为延迟初始化。问题在于类中存在 new 关键字,这会导致代码难以测试。仍然认为这是比使用字符串的改进。

© www.soinside.com 2019 - 2024. All rights reserved.