Property hook cannot be both final and private

Description

When a property is final, it cannot be overridden in a child class; when a class is private, it is only available in the current class.

Hence, a property cannot be final and private at the same time.

In this situation, the property may be final, due to the property hooks. A property without hooks cannot be final.

Example

<?php

class X {
     private $p {
             final get => 2;
             set => $this->p = $value;
     }
}

?>

Solutions

  • Remove the hooks, and use the magic methods __get/__set.

  • Remove the final keyword.

  • Remove the private keyword and use protected or public.