PHP:防止链式方法返回?
对于返回值的非常简单的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方法,使其仅在未链接任何内容时返回,或者什么是重新计算此代码的最佳方法 我可以做些
$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语言的内容才能更好地理解它