1.2.461. Final Traits Are Final

A final method in a trait is also final when in its importing class. This means that the importing class may redefine it, but not the children.

<?php

trait t {
     final function FFinal() {}
     final function FNotFinalInClass() {}
     function FNotFinal() {}     // This is a normal method
}

class x {
     use t;

     function FNotFinalInClass() {}

}

class y extends x  {
     function FFinal() {}            // This is KO, as it is final in the trait
     function FNotFinalInClass() {}  // This is OK, the class as priority
     function FNotFinal() {}
}
?>

1.2.461.1. Specs

Short name

Traits/FinalTraitsAreFinal

Rulesets

All, CompatibilityPHP53, CompatibilityPHP54, CompatibilityPHP55, CompatibilityPHP56, CompatibilityPHP70, CompatibilityPHP71, CompatibilityPHP72, CompatibilityPHP73, CompatibilityPHP74, CompatibilityPHP80, CompatibilityPHP81, CompatibilityPHP82

Exakat since

2.5.3

PHP Version

With PHP 8.3 and older

Severity

Minor

Time To Fix

Quick (30 mins)

Precision

High

Available in

Entreprise Edition, Exakat Cloud