是否有任何方法可以将类属性绑定到该类内的方法参数,以便在单击 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,所以链接在那里,但现在它不在那里。
我想知道是否有什么方法可以实现这一目标。有什么想法吗?
我想避免每次都写 if
$scope($this->documents ??= new Documents());
这引用了属性以及您想要在那里使用的类。这通常比使用代表两者的字符串更好(并且还失去了对具体属性和具体类名的引用)。
你在那里所做的也称为延迟初始化。问题在于类中存在 new 关键字,这会导致代码难以测试。仍然认为这是比使用字符串的改进。