2012-07-16 40 views
-2

在PHP中似乎沒有被privateprotected方法之間存在很大的差距的差異。之間private和protected

asked why I should use protected in PHP Chatroom and got this answer:

,除非你有很好的理由不:是
和良好的理由是,如果你的代碼是封閉源代碼庫
即使如此,它可以與反射

覆蓋

所以 -

如果private方法可能被用Reflectio覆蓋ns,private方法有什麼意義?

+1

因此,它可以被覆蓋,但至少實施者知道自己做錯了什麼在這種情況下。 – 2012-07-16 16:50:12

+0

@WouterH是真實的,但即使考慮到它可以被覆蓋的事實是一個漏洞。 – Neal 2012-07-16 16:52:07

+0

你也可以在沙發上跳,這並不意味着你必須這樣做。 – 2012-07-16 16:54:02

回答

9

privateprotected在那裏更容易地編寫代碼,做正確的事。正如你已經注意到的,它們不是牢不可破的 - 如果你願意,沒有什麼能夠阻止你繞過它們。這是因爲他們是爲了保護你意外做錯事,而不是從積極試圖來。

那你可以用反射繞過它們,並不代表你應該。您可以考慮將privateprotected作爲「保修無效,如果損壞」的標籤;如果你忽視它們並直接與東西混淆,那麼對象/類可能無法正常運行。 它沒有義務在這一點上,因爲你已經採取了自己的內臟混亂 - 而這樣做的代碼完全是責怪。現在

,作爲標題的問題......你用protected具體申報界面類;你基本上聲明你打算讓他們直接使用這些東西,而private說你不這樣做。他們是否無視這取決於他們,但如果他們這樣做,然後擰他們。你試圖警告他們。

1

是的,它可以使用反射重寫,但這不是重點,重點是在正常使用下限制對方法的訪問,即如果有人使用你的類,他們不應該能夠訪問該方法,因爲它違反了班級所擁有的合同。

它的private/protected取決於使用它,因此,如果有人做了一個方法,私人那麼他們已經這樣做了,因爲你不應該需要從其它類訪問它,如果他們做了它再保護很可能他們只希望子類能夠訪問該方法。

相關問題