Добрый день!
А есть ли способ закрыть возможность вывода приватных переменных объекта через print_r(), да и var_dump() и любым другим способом тоже?
Ну, т.е. не хочу, чтобы закрытые переменные класса можно было считать таким способом. __set_state(), __debugInfo() знаю. __debugInfo() только начиная с 5.6 работает. К тому же вряд ли она закроет print_r().
1. MAXUS - 25 Апреля, 2015 - 14:43:58 - перейти к сообщению
2. DeepVarvar - 25 Апреля, 2015 - 14:45:45 - перейти к сообщению
Нафига?
Говнокод прятать?
Говнокод прятать?
3. MAXUS - 26 Апреля, 2015 - 14:09:30 - перейти к сообщению
DeepVarvar пишет:
Нафига?
Говнокод прятать?
Говнокод прятать?
Я давно заметил, что у части разработчиков с опытом развивается самокритика.
Но это не ответ на вопрос. Это даже не попытка... Потому что вопрос ты не понял. Ты можешь с помощью var_dump или print_r прочитать код?
Вопрос в том, зачем создавать private переменные, если их можно считать? Функцию ты не запустишь, а переменные - пожалуйста, вот они. В чем тогда смысл делать их приватными? Для чего разработчики php делили переменные на public, protected и private? Только, чтобы их нельзя было изменить?
Получается, что как только ты делаешь переменную доступной для всех функций внутри класса, она сразу становится доступной для чтения извне. Я нахожу это глупостью, если не предусмотрен механизм такое поведение изменить. Я понимаю, что для отладки это удобно, но в дальнейшем это превращается в косяк. С моей точки зрения...
4. Мелкий - 26 Апреля, 2015 - 14:22:43 - перейти к сообщению
Ну вы бы ещё про сериализацию вспомнили. Там можно даже менять приватные переменные, не то что читать из значения.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
5. MAXUS - 26 Апреля, 2015 - 14:34:21 - перейти к сообщению
Мелкий пишет:
Ну вы бы ещё про сериализацию вспомнили. Там можно даже менять приватные переменные, не то что читать из значения.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
Не. Это не борьба с мельницами. Я как раз спросил, чтобы понять - это мельница или нет?
Ну, и вопрос просто логики. Для чего нужны private переменные? В чем их суть?
(Добавление)
Мелкий пишет:
Ну вы бы ещё про сериализацию вспомнили. Там можно даже менять приватные переменные, не то что читать из значения.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
А static переменные можно каким-то способом считать?
6. MiksIr - 26 Апреля, 2015 - 15:24:35 - перейти к сообщению
MAXUS пишет:
Ну, и вопрос просто логики. Для чего нужны private переменные? В чем их суть?
Вот с этого стоило начинать.
Что бы это понять, нужно полнимать ООП, и в первую очередь - инкапсуляцию.
Можно начать с википедии https://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)
7. MAXUS - 26 Апреля, 2015 - 15:32:25 - перейти к сообщению
MiksIr пишет:
Вот с этого стоило начинать.
Что бы это понять, нужно полнимать ООП, и в первую очередь - инкапсуляцию.
Можно начать с википедии https://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)
MAXUS пишет:
Ну, и вопрос просто логики. Для чего нужны private переменные? В чем их суть?
Вот с этого стоило начинать.
Что бы это понять, нужно полнимать ООП, и в первую очередь - инкапсуляцию.
Можно начать с википедии https://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)
По-моему, вопрос как раз вызван тем, что подобное поведение противоречит принципам инкапсуляции:
Encapsulation can be used to hide data member and member function. Under this definition, encapsulation means that the internal representation of an object is generally hidden from view outside of the object's definition.
Я не прав?
8. DeepVarvar - 26 Апреля, 2015 - 15:40:48 - перейти к сообщению
MAXUS пишет:
Я все прекрасно понял. А Мелкий озвучил это явно.Потому что вопрос ты не понял
Если нужно сокрытие кода ядра, только с предоставлением апи -- используй ион-куб и/или зенд-гвард.
9. MAXUS - 26 Апреля, 2015 - 15:44:00 - перейти к сообщению
DeepVarvar пишет:
Если нужно сокрытие кода ядра, только с предоставлением апи -- используй ион-куб и/или зенд-гвард.
MAXUS пишет:
Я все прекрасно понял. А Мелкий озвучил это явно.Потому что вопрос ты не понял
Если нужно сокрытие кода ядра, только с предоставлением апи -- используй ион-куб и/или зенд-гвард.
Мне не нужно сокрытие кода. Мне нужно сокрытие данных объекта. Кмк, ты путаешь класс и объект.
10. DeepVarvar - 26 Апреля, 2015 - 15:52:28 - перейти к сообщению
Пххх, эт ты путаешь.
Класс -- это декларация (ну да, есть нюансы для абстрактов и статики), а объект это использование декларации.
Класс -- это декларация (ну да, есть нюансы для абстрактов и статики), а объект это использование декларации.
11. MiksIr - 26 Апреля, 2015 - 16:03:30 - перейти к сообщению
MAXUS пишет:
По-моему, вопрос как раз вызван тем, что подобное поведение противоречит принципам инкапсуляции:
Encapsulation can be used to hide data member and member function. Under this definition, encapsulation means that the internal representation of an object is generally hidden from view outside of the object's definition.
Я не прав?
Encapsulation can be used to hide data member and member function. Under this definition, encapsulation means that the internal representation of an object is generally hidden from view outside of the object's definition.
Я не прав?
Читайте уж все ;)
Потом осмыслить неплохо бы.
12. MAXUS - 26 Апреля, 2015 - 16:42:57 - перейти к сообщению
MiksIr пишет:
Читайте уж все ;)
Потом осмыслить неплохо бы.
Читайте уж все ;)
Потом осмыслить неплохо бы.
Да прочитал, в принципе Инкапсуляция - механизм, который позволяет объединить внутри объекта данные и связанные с ними функции, закрыв их от прямого внешнего изменения. Private переменные, как составляющая инкапсуляции отвечает непосредственно задаче закрыть возможность прямого доступа извне, но не отвечает задаче скрыть данные, которые а них хранятся, а попросту в большинстве языков они доступны для чтения тем или иным способом.
Поэтому вывод 1. Нефиг хранить в них то, к чему ты хочешь ограничить доступ не только на изменение, но и на чтение. Следует иметь в виду, что объявив внутри класса переменную как private вы не только предоставляете возможность другим функциям класса читать и изменять данные, но и предоставляете к таким данным доступ на чтение извне.
Вывод 2. Вернее предположение. Переменные не будут видны извне:
- только внутри scope функции (традиционно)
- или если они объявлены внутри класса как private static (вот это как раз предположение), я во всяком случае не нашел способа к таким переменным продолбиться. Например,
Если есть способ считать $v1, то подскажите, чтобы я не заблуждался
(Добавление)
Мелкий пишет:
Ну вы бы ещё про сериализацию вспомнили. Там можно даже менять приватные переменные, не то что читать из значения.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
А уж про возможность менять приватные члены в рантайме тупым closure::bindto я даже не говорю.
Если человек захочет сделать глупость - он её сделает. Поэтому не занимайтесь борьбой с ветряными мельницами. Если хочется влезть в потроха - это сделают.
Правильно я понимаю, что при помощи Closure::bind можно и статические переменные считать? Просто у меня php 5.3...