在PHP中似乎沒有被private
和protected
方法之間存在很大的差距的差異。之間private和protected
我asked why I should use protected
in PHP Chatroom and got this answer:
,除非你有很好的理由不:是
覆蓋
和良好的理由是,如果你的代碼是封閉源代碼庫
即使如此,它可以與反射
所以 -
如果private
方法可能被用Reflectio覆蓋ns,private
方法有什麼意義?
在PHP中似乎沒有被private
和protected
方法之間存在很大的差距的差異。之間private和protected
我asked why I should use protected
in PHP Chatroom and got this answer:
,除非你有很好的理由不:是
覆蓋
和良好的理由是,如果你的代碼是封閉源代碼庫
即使如此,它可以與反射
所以 -
如果private
方法可能被用Reflectio覆蓋ns,private
方法有什麼意義?
private
和protected
在那裏更容易地編寫代碼,做正確的事。正如你已經注意到的,它們不是牢不可破的 - 如果你願意,沒有什麼能夠阻止你繞過它們。這是因爲他們是爲了保護你意外做錯事,而不是從積極試圖來。
那你可以用反射繞過它們,並不代表你應該。您可以考慮將private
和protected
作爲「保修無效,如果損壞」的標籤;如果你忽視它們並直接與東西混淆,那麼對象/類可能無法正常運行。 它沒有義務在這一點上,因爲你已經採取了自己的內臟混亂 - 而這樣做的代碼完全是責怪。現在
,作爲標題的問題......你用protected
具體申報界面類;你基本上聲明你打算讓他們直接使用這些東西,而private
說你不這樣做。他們是否無視這取決於他們,但如果他們這樣做,然後擰他們。你試圖警告他們。
是的,它可以使用反射重寫,但這不是重點,重點是在正常使用下限制對方法的訪問,即如果有人使用你的類,他們不應該能夠訪問該方法,因爲它違反了班級所擁有的合同。
它的private/protected取決於使用它,因此,如果有人做了一個方法,私人那麼他們已經這樣做了,因爲你不應該需要從其它類訪問它,如果他們做了它再保護很可能他們只希望子類能夠訪問該方法。
因此,它可以被覆蓋,但至少實施者知道自己做錯了什麼在這種情況下。 – 2012-07-16 16:50:12
@WouterH是真實的,但即使考慮到它可以被覆蓋的事實是一個漏洞。 – Neal 2012-07-16 16:52:07
你也可以在沙發上跳,這並不意味着你必須這樣做。 – 2012-07-16 16:54:02