მეთოდების პრიორიტეტი ტრეიტებთან მუშაობისას PHP-ის OOP-ში
თუ კლასსა და ტრეიტში არის ერთიდაიგივე სახელის მეთოდი, მაშინ კლასის მეთოდი გადაფარავს ტრეიტის მეთოდს:
<?php
trait TestTrait
{
// მეთოდი სახელად method:
public function method()
{
return 'trait';
}
}
class TestClass
{
use TestTrait;
// იგივე მეთოდი სახელად method:
public function method()
{
return 'test';
}
}
$test = new TestClass;
echo $test->method(); // გამოიტანს 'test' - იმუშავა კლასის მეთოდმა
?>
თუ კი თავად კლასს არ გააჩნია ასეთი მეთოდი, მაგრამ არსებობს ტრეიტის მეთოდების და მშობელი კლასის მეთოდების სახელების კონფლიქტი, მაშინ ტრეიტის მეთოდებს გააჩნიათ პრიორიტეტი:
<?php
trait TestTrait
{
// მეთოდი სახელად method:
public function method()
{
return 'trait';
}
}
// მშობელი კლასი:
class ParentClass
{
// მეთოდი სახელად method:
public function method()
{
return 'parent';
}
}
// კლასი მემკვიდრეობით იღებს method მეთოდს მშობელი კლასიდან:
class TestClass extends ParentClass
{
use TestTrait;
}
$test = new TestClass;
echo $test->method(); // გამოიტანს 'trait', რადგან ტრეიტს გააჩნია პრიორიტეტი
?>