簡體   English   中英

PHP中的新方法鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM