A class method can call a renamed trait method and add class-specific behavior.

Trait Override

trait_override.php
<?php
trait Greets
{
    public function greet(string $name): string
    {
        return "hello " . $name;
    }
}

class LoudGreeter
{
    use Greets {
        greet as baseGreet;
    }

    public function greet(string $name): string
    {
        return strtoupper($this->baseGreet($name));
    }
}

$name = ;
$greeter = new LoudGreeter();
$message = $greeter->greet($name);

echo "name=" . $name . "\n";
echo "message=" . $message . "\n";
<?php
trait Greets
{
    public function greet(string $name): string
    {
        return "hello " . $name;
    }
}

class LoudGreeter
{
    use Greets {
        greet as baseGreet;
    }

    public function greet(string $name): string
    {
        return strtoupper($this->baseGreet($name));
    }
}

$name = ;
$greeter = new LoudGreeter();
$message = $greeter->greet($name);

echo "name=" . $name . "\n";
echo "message=" . $message . "\n";
<?php
trait Greets
{
    public function greet(string $name): string
    {
        return "hello " . $name;
    }
}

class LoudGreeter
{
    use Greets {
        greet as baseGreet;
    }

    public function greet(string $name): string
    {
        return strtoupper($this->baseGreet($name));
    }
}

$name = ;
$greeter = new LoudGreeter();
$message = $greeter->greet($name);

echo "name=" . $name . "\n";
echo "message=" . $message . "\n";
adapted reuse Trait aliases let a class keep the shared method available while customizing its public method.