Насколько я знаю, вы не можете этого сделать. Использование черты в основном включает его содержание в класс. Свойства и методы, которые он определяет, могут очень хорошо зависеть друг от друга.
Одной из альтернативных опций может быть ручное определение методов, которые вы хотите в классе, который не содержит черты, а вместо этого делегирует вызовы экземпляр класса, который делает.
Примерно так:
trait MyTrait
{
public function ok(): void
{
echo 'ok';
}
public function nope(): void
{
echo 'not ok';
}
}
class MyTraitDelegate
{
use MyTrait;
}
class MyClass
{
private MyTraitDelegate $traitDelegate;
public function __construct()
{
$this->traitDelegate = new MyTraitDelegate();
// Note: you could also inject it, but in this case, not sure it's worth.
}
public function ok(): void
{
$this->traitDelegate->ok();
}
}
$mc = new MyClass;
$mc->ok(); // works
$mc->nope(); // method not found