2011-04-14 112 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我堆棧被稱爲以靜態方式

相關問題