Chcę metodą łańcuchowej wzywa moich klas, co następuje:PHP 5.4 - Cechy i self/static
new Obj($args, $if, $any)->foo()->bar();
Niestety muszę ująć budowę wewnątrz nawiasu:
(new Obj($args, $if, $any))->foo()->bar();
Więc chciałbym lubią mieć cechę, że mogę ponownie wykorzystać w każdej klasie i chcą być w stanie zrobić coś takiego:
Obj::create($args, $if, $any)->foo()->bar();
chcę go do b Cecha więc moje klasy mogą nadal dziedziczyć z innych klas. Doszedłem do tego punktu:
trait Create
{
public static final function create()
{
$reflect = new ReflectionClass(/* self ? static ? Anything else ? */);
return $reflect->newInstanceArgs(func_get_args());
}
}
class Obj
{
use Create;
// ...
}
Ale wydaje się, że cechy nie obsługiwać własny lub statycznych słów kluczowych, a nie mogę zrobić get_class($this)
ponieważ jest statyczna. Czy istnieje wyraźny sposób robienia tego, co chcę?
Dzięki za przeczytanie.
EDIT: Dla tych, którzy zastanawiać, oto dlaczego ma to być cecha, a nie abstrakcyjną klasą bazową:
$database = (new Database())
->addTable((new Table())
->addColumn((new Column('id', 'int'))
->setAttribute('primary', true)
->setAttribute('unsigned', true)
->setAttribute('auto_increment', true))
->addColumn(new Column('login', 'varchar'))
->addColumn(new Column('password', 'varchar')));
$database = Database::create()
->addTable(Table::create()
->addColumn(Column::create('id', 'int')
->setAttribute('primary', true)
->setAttribute('unsigned', true)
->setAttribute('auto_increment', true))
->addColumn(Column::create('login', 'varchar'))
->addColumn(Column::create('password', 'varchar')));
Mniej głębokość wspornik, mniej błędów, a mniej czasu potrzeba, aby naprawić te błędy oraz łatwiejszy do odczytania kod i, moim zdaniem, lepiej wyglądający kod.
jaki jest dokładnie problem z używaniem nawiasów? – Spudley
Zmniejszenie liczby nawiasów zmniejsza prawdopodobieństwo popełnienia błędu, zapominając o jednym z nich i czasie potrzebnym do jego naprawienia, a także ułatwia odczytanie i zrozumienie kodu. – Virus721
hmm, cóż, szczerze mówiąc, powiedziałbym, że kod z nawiasami jest doskonale czytelny, szczególnie jeśli używasz przyzwoitego IDE. Ale każdy do własnego. :-) – Spudley