Priorità dei metodi quando si lavora con i tratti nella OOP in PHP
Se una classe e un tratto hanno un metodo con lo stesso nome, il metodo della classe sovrascriverà il metodo del tratto:
<?php
trait TestTrait
{
// Metodo con nome method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Lo stesso metodo con nome method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // visualizzerà 'test' - è stato eseguito il metodo della classe stessa
?>
Se la classe stessa non ha un tale metodo, ma c'è un conflitto di nomi tra i metodi del tratto e i metodi della classe genitore, allora i metodi del tratto hanno priorità:
<?php
trait TestTrait
{
// Metodo con nome method:
public function method()
{
return 'trait';
}
}
// Classe genitore:
class ParentClass
{
// Metodo con nome method:
public function method()
{
return 'parent';
}
}
// La classe eredita il metodo method dal genitore:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // visualizzerà 'trait', poiché il tratto ha priorità
?>