ile gelişmiş tip doğrulaması İki arabirimi (Foo
ve Bar
) uygulayan türlere izin verilmemelidir, bunlardan biri değil.OptionsResolver bileşeni
interface Foo {};
interface Bar {};
class Foz implements Foo {};
class Baz implements Bar {};
class Foobar implements Foo, Bar {};
$resolver = new OptionsResolver();
$resolver->setRequired('data');
$resolver->setAllowedTypes('data', ['Foo', 'Bar']);
Yanlış!, Foz
ve Baz
örneklerine de izin vermektedir.
Ben Bar
tipleri alt sınıfını değil, Bar
örneklerini izin gerekiyor.
class Bar {};
class Foobar extends Bar {};
class FoobarBaz extends Foobar {};
$resolver = new OptionsResolver();
$resolver->setRequired('data');
$resolver->setAllowedTypes('data', ['Bar']);
Yanlış!, Bar
örneğini de sağlar.
Sınıflarım/arabirimlerimi yeniden tasarlayabilirim, ancak tasarım sorunu değil. Yani, bu bileşenle başarmak mümkün mü? Böylece bu türden olan izin verilecek
setAllowedTypes(string $option, string|string[] $allowedTypes)
$allowedTypes
dizeleri listesini kabul edebilir argüman ve mantık VEYA olarak kullanılır:
teşekkür @MikO Cevabınız için, tavsiyene takdir (1) – yceruto