One good example of a trait, would be to give a lot of enums a method to retrieve their cases, values or both.
<?php
trait EnumToArray
{
public static function names(): array
{
return array_column(self::cases(), 'name');
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
public static function asArray(): array
{
if (empty(self::values())) {
return self::names();
}
if (empty(self::names())) {
return self::values();
}
return array_column(self::cases(), 'value', 'name');
}
}
?>
Some example outputs:
<?php
var_export(IpVersion::names()); // ['Ipv4', 'IPv6']
var_export(IpVersion::values()); // []
var_export(IpVersion::asArray()); // ['IPv4', 'IPv6']
var_export(Language::names()); // ['en', 'es']
var_export(Language::values()); // ['English', 'Spanish']
var_export(Language::asArray()); // ['en' => 'English', 'es' => 'Spanish']Карактеристики
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Карактеристики
Референца за `language.enumerations.traits.php` со подобрена типографија и навигација.
Карактеристики
Енумерациите можат да користат својства (traits), кои ќе се однесуваат исто како и на класите. Единствениот услов е својствата (traits) што се користат во една енамерација не смеат да содржат променливи. Тие можат да содржат само методи, статични методи и константи. Својство (trait) со променливи ќе резултира со фатална грешка. used во една енамерација не смеат да содржат променливи. Тие можат да содржат само методи, статични методи и константи. Својство (trait) со променливи ќе резултира со фатална грешка.
<?php
interface Colorful
{
public function color(): string;
}
trait Rectangle
{
public function shape(): string {
return "Rectangle";
}
}
enum Suit implements Colorful
{
use Rectangle;
case Hearts;
case Diamonds;
case Clubs;
case Spades;
public function color(): string
{
return match($this) {
Suit::Hearts, Suit::Diamonds => 'Red',
Suit::Clubs, Suit::Spades => 'Black',
};
}
}
?>