Нека първо си припомним какво е Implicit type casting в PHP.
<?php declare(strict_types = 1); $x = '25'; var_dump($x); // string(2) "25" var_dump($x * 2); // int(50)
Виждаме как PHP сам е извършил type cast към integer за да изпълни аритметичната операция.
Explicit type casting е зададен програмно от нас, когато сами кастваме променлива към друг тип.
При Coercion polymorphism можем да използваме и двата вида type casting, като например с помоща на вторият вид (explicit), може например да кастваме връщаният резултат.
PHP поддържа Coercion polymorphism само ако зададем declare(strict_types = 0); за да разрешим на PHP функциите да приемат аргументи от различен от зададеният тип.
<?php class SomeClass { private int $a;public function setA(int $a): void
{
$this->a = $a;
var_dump($this->a);
}
} $p = new SomeClass; $p->setA(123); // int(123) $p->setA(123.45); // int(123)
Ясно се вижда идеята на тoзи вид полиморфизъм – PHP сам, имплицитно преобразува подаденият аргумент и по този начин можем да използваме въпросният метод както с целочислени, така и с дробни аргументи.