PHP:防止链式方法返回?

PHP:防止链式方法返回?,php,oop,method-chaining,Php,Oop,Method Chaining,对于返回值的非常简单的PHP类的方法链接,我遇到了一些麻烦,有时需要经过解密过程: $dataset = new Datacontainer; $key = $dataset->get('key'); $key2 = $dataset->get('key')->decrypt(); get方法是返回的所在。因此,对第二行的decrypt方法的调用在其当前状态下无法工作 我可以做些什么来设置get方法,使其仅在未链接任何内容时返回,或者什么是重新计算此代码的最佳方法 我可以做些

对于返回值的非常简单的PHP类的方法链接,我遇到了一些麻烦,有时需要经过解密过程:

$dataset = new Datacontainer;
$key = $dataset->get('key');
$key2 = $dataset->get('key')->decrypt();
get
方法是返回的所在。因此,对第二行的
decrypt
方法的调用在其当前状态下无法工作

我可以做些什么来设置
get
方法,使其仅在未链接任何内容时返回,或者什么是重新计算此代码的最佳方法

我可以做些什么来设置get吗 方法,仅在不显示任何内容时返回 和它拴在一起

不,那是不可能的。(可能使用高度复杂的反射技术,但如果可能的话,这并不实用。)

或者最好的方法是什么 重新计算这个代码

我认为你们班的结构有问题。通常,一个方法执行某些操作,但返回工作实例,更改类/实例的状态,例如,通过一个属性,可以通过一个特殊的/getter方法再次获取该属性。

get()方法实际上不知道是否有任何东西链接到它;但是,如果get()方法不返回任何内容(null),PHP将抱怨试图对非对象调用decrypt()方法

您可以做的是将一个附加参数传递到get()方法中,该参数指示它是应该返回值,还是应该返回具有decrypt方法的对象

$key = $dataset->get('key');
$key2 = $dataset->get('key',true)->decrypt();
$dataset->get('key')
必须返回一个对象,其中
decrypt()
是一个方法。不清楚您的
decrypt()
方法属于哪个类。如果它是
$dataset
类的一部分,则需要分两行调用它:

$key2_encrypted = $dataset->get('key');
$key2 = $dataset->decrypt($key2_encrypted);

根据我目前对流程的理解,我将采取以下方法:

解密数据的对象正在提供服务。这些对象通常是传入的

通过作为合作者的构造器:

class ClientClass {
    private $decryptor
    public function __construct(Decryptor $decryptor) {
        $this->decryptor = $decryptor;
    }
    public function doSomethingWith(DataSet $data) {
        $key = $DataSet->getKey();
        // do stuff, decide whether there are encryption needs
        $encryptedKey = $this->decryptor->decrypt($key);
    }
}

请注意,从数据集中获取密钥在这里还有改进的余地(然后我需要更多地了解正在完成的工作,因此命名为ClientClass)。

此方法链接策略对于所有其他OOP语言都是常规的。我认为您需要阅读任何OOP语言的内容才能更好地理解它