我已經寫了一些面向對象的PHP5代碼,但它不會解析,我也不完全確定爲什麼。我使用的方法鏈簡化了很多它 - 和它看起來像這樣PHP中的新/方法鏈接
$head->AddTag(new Tag('meta')->Extras('http-equiv="Content-Type" content="text/html; charset=utf-8"'));
顯然,它有意想不到的T_OBJECT_OPERATOR
。這對我來說似乎完全有效 - 問題在哪裏?
我已經寫了一些面向對象的PHP5代碼,但它不會解析,我也不完全確定爲什麼。我使用的方法鏈簡化了很多它 - 和它看起來像這樣PHP中的新/方法鏈接
$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")-> .....
一個例子應該是這個樣子 - 我wussing出和寫入非普通一個,我懶得寫一個通用的一個,因爲這是複雜的:)
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();
在你的__construct中不可能返回實例嗎?即''返回這個;' – JamesHalsall 2011-02-22 22:57:52
@Jaitsu no,'__construct'不能返回任何東西 – 2011-02-22 23:00:50
@Pekka,歡呼...可能爲什麼我從來沒有嘗試過 – JamesHalsall 2011-02-22 23:10:16
據我所知是在某個地方討論這一提議,但問題是:是否'新的X() - > Y()'平均'(新的X()) - > y()'或'new(X() - > y())'?但是,我也想念這個句法糖。 – KingCrunch 2011-02-22 22:48:35
如果插入這些括號,是否正常工作? – mellamokb 2011-02-22 22:49:33
@mellamokb我不這麼認爲,他只是將其作爲一個例子 – 2011-02-22 22:49:59