Защо функциите в контролерите и таблиците на cakephp 3.x са публични, но функциите в обектите са защитени?

Използвам cakephp 3.x

Направих това наблюдение. Функциите в контролерите и таблиците се декларират като публични. Функциите в обектите са декларирани като защитени. Защо функциите на обекти не могат да бъдат декларирани и като публични?


person user781486    schedule 27.09.2015    source източник


Отговори (1)


Изглежда, че нямате представа кога и защо използвате обхвата на видимост. Вижте и този въпрос „Каква е разликата между публичен, частен и защитен?“.

Всъщност нищо не ви пречи да декларирате публичен метод в обект, опитайте го. Нищо не ви пречи да използвате protected и private и в други класове. Но ги използвайте там, където има смисъл от гледна точка на архитектурата. Също така обектите вече имат публични методи. Предлагам ви да прочетете главата за обектите в книгата, тя обяснява подробно как работят обектите, какво представляват и за какво са предназначени и какво можете да правите с тях.

Обектите представляват данни, данните се достъпват чрез свойствата или като масив, тъй като обектът имплементира ArrayAccess. За достъп до виртуални свойства (отново, прочетете главата) се използват аксесорите и мутаторите, които всъщност са защитени. Тези методи се извикват, когато се опитате да получите достъп до несъществуващо свойство, вижте метода get(). Те са защитени, защото директният достъп до тях не е желан, това би нарушило начина, по който работят обектите. Смята се, че данните са достъпни само чрез свойствата или метода get(), така че всички обекти навсякъде да работят еднакво.

В добре написан код обхватът на видимост обикновено има причина. Но съм виждал лош код, при който хората правят нещата частни като луди без причина, което ефективно ви пречи да промените поведението на обектите, като ги наследите. Не съм проверявал, но съм почти сигурен, че няма да намерите частен метод в рамката, защото се смята, че е разширен.

В крайна сметка: Анализирайте кода и разберете защо нещо е защитено, ако искате да го знаете. Това ще бъде по различна причина за всеки случай.

person floriank    schedule 27.09.2015