php - 是否可以在 PHP 中编写一系列重复引用单个对象的语句?

标签 php php-5.3

是否可以编写一系列重复引用单个对象的语句,而不必每次都写入该对象?

我之所以这样做是因为我以前在 Visual Basic 中这样做过:

With person
    .setFullName(.firstName+" "+.lastName)
    .addParent(parent)
    .save()
End With

这是一个简写

person.setFullName(person.firstName+" "+person.lastName)
person.addParent(parent)
person.save()

可以用 PHP 实现这一点吗? 重写下面的代码而不需要写 $person 5 次?

$person->setFullName($person->firstName.' '.$person->lastName);
$person->addParent($parent);
$person->save();

注意:我不是指方法链接,原因有两个:

1) 我也想使用公共(public)成员

2) 我不使用我编写的类,因此无法将 return $this; 添加到所有方法

谢谢

最佳答案

存在允许执行此操作的 PHP 库: https://github.com/lisachenko/go-aop-php

实现示例: http://go.aopphp.com/blog/2013/03/19/implementing-fluent-interface-pattern-in-php/

创造你的方面

<?php
use Go\Aop\Aspect;
use Go\Aop\Intercept\MethodInvocation;
use Go\Lang\Annotation\Around;

class FluentInterfaceAspect implements Aspect
{
    /**
     * Fluent interface advice
     *
     * @Around("within(FluentInterface+) && execution(public **->set*(*))")
     *
     * @param MethodInvocation $invocation
     * @return mixed|null|object
     */
    protected function aroundMethodExecution(MethodInvocation $invocation)
    {
        $result = $invocation->proceed();
        return $result!==null ? $result : $invocation->getThis();
    }
}

添加匹配接口(interface)

interface FluentInterface
{

}


class User implements FluentInterface
{
    protected $name;
    protected $surname;
    protected $password;

    public function setName($name)
    {
        $this->name = $name;
    }

    public function setSurname($surname)
    {
        $this->surname = $surname;
    }

    public function setPassword($password)
    {
        if (!$password) {
            throw new InvalidArgumentException("Password shouldn't be empty");
        }
        $this->password = $password;
    }
}

使用

$user = new User;
$user->setName('John')->setSurname('Doe')->setPassword('root');

但是您可以编写匹配规则而无需添加新接口(interface)。

附注这不是问题的正确答案,因为需要其他语法糖。 PHP 不支持此类语法。

关于php - 是否可以在 PHP 中编写一系列重复引用单个对象的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24819979/

相关文章:

php - 扩展 PHP 类以允许通过 __callStatic 找到新方法

php - 从 file_get_contents 获取 POST 数据

PHP 5.3 找不到 normalizer_normalize()

php - PHP 中的 self::$bar 和 static::$bar 有什么区别?

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 使用 php 进行异步 http 调用

php - 如何优化 Yii 中的查询?

Php oop 在数据库中插入日期/时间

php - crypt() 函数中的最大字符串输入是多少?

linux - 使用php5.3安装xdebug