Metodų prioritetas dirbant su traitais OOP PHP
Jei klasėje ir traite yra to paties pavadinimo metodas, tai klasės metodas perrašys traito metodą:
<?php
trait TestTrait
{
// Metodas su pavadinimu method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// Toks pat metodas su pavadinimu method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // išves 'test' - suveikė paties klasės metodas
?>
Jei pati klasė neturi tokio metodo, bet yra traito metodų ir tėvinės klasės metodų pavadinimų konfliktas, tai traito metodai turi prioritetą:
<?php
trait TestTrait
{
// Metodas su pavadinimu method:
public function method()
{
return 'trait';
}
}
// Tėvinė klasė:
class ParentClass
{
// Metodas su pavadinimu method:
public function method()
{
return 'parent';
}
}
// Klasė paveldi metodą method iš tėvinės:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // išves 'trait', nes traitas turi prioritetą
?>