我正在创建我的第一个作曲家包。该软件包提供与现有软件包相同的功能,主要包含一些特定于我的软件包的附加功能。在我自己的类旁边,Vendor包中的所有类仍然需要可访问,但是来自我的包的命名空间。一些供应商类需要进行一些调整,但没有什么重要的。
让我们看一个简单的例子。供应商包中有一些类Foo
和Bar
,它们位于名称空间Vendor\Package
中。
<?php
namespace Vendor\Package;
class Foo // class needs adjustments/addition
{
private $vendorVar;
public function fooFunction() // function is fine as it is
{
return 'Vendor Foo output';
}
public function anotherFooFunction() // function should do some additional things
{
$this->vendorVar = 'Vendor!';
}
}
和
<?php
namespace Vendor\Package;
class Bar // class is fine as it is
{
public function barFunction() // function is fine as it is
{
return 'Vendor Bar output';
}
}
由于我想为类Foo添加一些额外的功能并更改一次,我继承了这样的供应商:
<?php
namespace Me\MyPackage;
use Vendor\Package\Foo as vendorFoo;
class Foo extends vendorFoo
{
private $myVar;
public function myFooFunction() // additional function to the Foo class
{
return 'My Foo output';
}
public function anotherFooFunction() // change the functionality for this function
{
$this->myVar = 'Me!';
parent::anotherFooFunction();
}
}
现在我可以执行以下操作:
<?php
use Me\MyPackage\Foo;
$foo = new Foo();
echo $foo->myFooFunction(); // output: 'My Foo output'
echo $foo->fooFunction(); // output: 'Vendor Foo output'
$foo->anotherFooFunction; // will set $vendorVar and $myVar
由于我不希望用户需要知道Vendor包,我希望他们可以访问Vendor包的所有其他功能,但是可以访问我自己的命名空间。基本上他们需要能够做类似
的事情<?php
use Me\MyPackage\Bar;
$bar = new Bar();
echo $bar->barFunction(); // output: 'Vendor Bar output'
我假设我可以在我的包中添加以下代码。
<?php
namespace Me\MyPackage;
use Vendor\Package\Bar as vendorBar;
class Bar extends vendorBar {} // Do I have to add this for each class I want to use from my namespace?
当Vendor包有很多类而且我只想触摸一个时,这对我来说似乎有些过分。这是唯一/最好的方式,还是有其他/更好的方式?
其他信息: