克隆实例并链接方法调用,可能吗?

发布于 2024-12-27 16:24:40 字数 521 浏览 3 评论 0原文

是否可以通过链接来<​​code>克隆一个调用其方法的实例?这给了我一个语法错误

/**
 * Parse an object containing (eventually) "duration" property or "year" (and
 * eventually) "month" properties.
 *
 * @return array Array containing start date and end date DateTime objects.
 */
public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array((clone $now)->sub($duration), $now);
}

Is possible to clone an instance calling a method on it with chaining? This gives me a syntax error:

/**
 * Parse an object containing (eventually) "duration" property or "year" (and
 * eventually) "month" properties.
 *
 * @return array Array containing start date and end date DateTime objects.
 */
public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array((clone $now)->sub($duration), $now);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虚拟世界 2025-01-03 16:24:40

不,这是不可能的。您可以使用“工厂”方法来代替:

public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($this->clone($now)->sub($duration), $now);
}

public function clone($object)
{
    return clone $object;
}

旁注:目前也无法通过这种方式使用 new 运算符。在即将发布的 PHP 5.4 版本中,new 可以实现此功能,如下所示:

$a = (new a())->doStuff()->foMoreStuff();

但此处不支持克隆。

No, this is not possible. You could use a "factory" method instead:

public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($this->clone($now)->sub($duration), $now);
}

public function clone($object)
{
    return clone $object;
}

Side note: Using the new operator is currently not possible this way either. In the upcoming PHP 5.4 release this will be possible for new as follows:

$a = (new a())->doStuff()->foMoreStuff();

Clone however is not supported here.

飘落散花 2025-01-03 16:24:40
public function parseTimeArgs($args)
{
    $now = new DateTime();
    $nowClone = clone $now;

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($nowClone->sub($duration), $now);
}
public function parseTimeArgs($args)
{
    $now = new DateTime();
    $nowClone = clone $now;

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($nowClone->sub($duration), $now);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文