我想鏈方法調用我的類如下:PHP 5.4 - 性狀和自我/靜態
new Obj($args, $if, $any)->foo()->bar();
不幸的是,我必須括號內封閉施工:
(new Obj($args, $if, $any))->foo()->bar();
,所以我會喜歡有一個特點,我可以在每個班級重用,我希望能夠做到這樣的事情:
Obj::create($args, $if, $any)->foo()->bar();
我希望它b e特性,所以我的類仍然可以從其他類繼承。 我來這一點:
trait Create
{
public static final function create()
{
$reflect = new ReflectionClass(/* self ? static ? Anything else ? */);
return $reflect->newInstanceArgs(func_get_args());
}
}
class Obj
{
use Create;
// ...
}
但好像性狀不處理自己或者靜態的關鍵詞,我不能這樣做get_class($this)
,因爲這是靜態的。 有沒有明確的方法可以做我想要的?
感謝您的閱讀。
編輯:對於那些誰不知道,這是爲什麼我想這是一個特點,而不是一個抽象基類:
$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')));
少支架深度,少犯錯誤,少的時間來修復這些錯誤需要,還有一個更容易閱讀的代碼,在我看來,代碼更好看。
使用括號的問題究竟是什麼? – Spudley 2013-03-15 23:09:37
減少括號的數量可以通過忘記其中一個問題以及解決問題所需的時間以及使代碼更易於閱讀和理解來減少犯錯誤的可能性。 – Virus721 2013-03-15 23:15:01
嗯,說實話,我會說括號內的代碼是完全可讀的,特別是如果你使用的是體面的IDE。但每一個都是屬於自己的。 :-) – Spudley 2013-03-15 23:17:18