我已经编写了一些面向对象的PHP5代码,但它不会解析,我不完全确定原因。我已经使用方法链来简化它 - 它看起来像这样
$head->AddTag(new Tag('meta')->Extras('http-equiv="Content-Type" content="text/html; charset=utf-8"'));
显然,它有意外T_OBJECT_OPERATOR
。这对我来说似乎完全有效 - 问题在哪里?
答案 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();