PHP中的新/方法链接

时间:2011-02-22 22:41:26

标签: php

我已经编写了一些面向对象的PHP5代码,但它不会解析,我不完全确定原因。我已经使用方法链来简化它 - 它看起来像这样

$head->AddTag(new Tag('meta')->Extras('http-equiv="Content-Type" content="text/html; charset=utf-8"'));

显然,它有意外T_OBJECT_OPERATOR。这对我来说似乎完全有效 - 问题在哪里?

2 个答案:

答案 0 :(得分:3)

下面:

new Tag('meta')->
遗憾的是,链接与new一起无效。

不要问我为什么,我想拥有它。 (编辑:@troelskn解释了原因。我没想到。)

您需要在通话外声明new Tag('meta')。构建一个可以为您提供对象的通用静态工厂类也应该可以工作,如下所示:

$head->AddTag(Factory::create("Tag", "meta")-> .....

一个例子应该看起来像这样 - 我正在努力写出一个非泛型的,我现在懒得写一个通用的,因为那很复杂:)

public static function createTag($meta)
 {
   return new Tag($meta); 
}

答案 1 :(得分:0)

这在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();