2011-04-14 111 views
1

我一直在努力学习PHP,并且在制作自己的博客引擎方面进展顺利。当整合OAuth的时候,我碰到了this solution to encrypt keys为什么这甚至是一堂课?或者为什么这些功能至少是静态的?

用法说,沿着这些线路做一些事情:

<?php 

// a new proCrypt instance 
$crypt = new proCrypt; 

// encrypt the string 
$encoded = $crypt->encrypt('my message'); 
echo $encoded."\n"; 

// decrypt the string 
echo $crypt->decrypt($encoded) . "\n"; 

?> 

我的问题是...为什么这是一个类?看起来像两个函数将会很好。我不明白为什么要实例化一个对象然后调用一些方法。这是OOP思维横行的例子,还是我在这里失踪的东西?

如果有一些令人信服的理由让它成为一个类,那么为什么这些方法不是静态的,以至于我只能拨打proCrypt::encrypt('my message');

这是相关的,因为我写的很多代码都使用静态函数,或者站在功能编程而不是OOP。如果我正在做一些可怕的错误,我想知道这件事。

回答

2

该类有一些可以设置为影响加密结果的变量。如果你想让这个类是静态的,你可以设置这些变量一次,并且每个使用该函数的人都会受到影响。相反,如果您将其设为对象,则可以轻松创建具有不同值的多个版本。

+0

具体来说,在这种情况下发现一个非常显著变量是*加密密钥*。就我理解PHP而言,看起来上面的代码总是使用密钥“keee”进行加密,除了作为演示之外,它并不是非常有用。当然,您可以使用两个参数的静态方法,但是这种设计允许将算法和密钥的组合作为一个单独的对象进行传递,无需其他参数即可进行加密/解密。 – 2011-04-14 17:46:32

1

也许是因为某些加密算法需要一些额外的状态作为输入(如公钥/私钥),并且被对象封装。

0

一种可能性:“memoization”。

一个类在这里可能很有用,因为它可能会保留中间结果或缓存以前的结果。

这不是“OOP思维横行”。这只是一种谨慎的设计,因为 - 也许 - 在幕后发生了一些有状态的事情。

0

那么我不知道为什么你找到的解决方案不是静态的。

我已经开始使用this solution我堆栈被称为以静态方式

相关问题