[英]new/method chaining in PHP
我已經寫了一些面向對象的PHP5代碼,但是它不會解析,我也不完全知道為什么。 我已經使用方法鏈來簡化了很多-看起來像這樣
$head->AddTag(new Tag('meta')->Extras('http-equiv="Content-Type" content="text/html; charset=utf-8"'));
顯然,它具有意外的T_OBJECT_OPERATOR
。 對我來說,這似乎是完全正確的-問題出在哪里?
這里:
new Tag('meta')->
可悲的是,鏈與new
結合使用無效。
不要問我為什么,我想擁有它。 (編輯:@troelskn解釋了原因。我沒有考慮。)
您將需要在通話之外聲明new Tag('meta')
。 構建一個可以為您提供對象的通用靜態工廠類也應該可以,例如:
$head->AddTag(Factory::create("Tag", "meta")-> .....
一個例子應該看起來像這樣-我在忙着寫一個非泛型的例子,我太懶了現在不能寫一個泛型的例子,因為那很復雜:)
public static function createTag($meta)
{
return new Tag($meta);
}
這在PHP中不是有效的語法。 這樣做的原因是php既具有類又具有自由浮動的功能。 因此,您可能會遇到模棱兩可的情況,例如:
function foo () { return "bar"; }
class foo {}
class bar {}
$x = new foo();
// Is $x a "foo" or a "bar"?
如果要鏈接,可以創建一個函數並用作工廠。 作為類的靜態成員或自由浮動函數。 我更喜歡后者,其內容為:
function foo() { return new Foo(); }
class Foo {
funcion bar() {}
}
// Usage:
foo()->bar();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.