Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Время от времени использую print_r. Но в дампе выводятся все свойства объекта, в том числе и private/protected. А это иногда не нужно, в приватных переменных класса у меня хранятся вспомогательные данные, которые загромождают вывод. Можно ли сделать так, чтобы в дампе были только публичные свойства? А в идеале, чтобы для приватных свойств не выводилось их значение. Я пока приемлемого решения так и не нашел. 1. Можно выполнить var_dump(get_class_vars(get_class($object))), будут отображены нужные мне свойства, но без содержания. Можно, конечно, потом пройтись по этим свойствам и получить значения из объекта, но не хотелось бы городить свой дампер. 2. Можно в классе реализовать метод __debugInfo, но это применимо только в var_dump, а мне удобнее пользоваться print_r. Кроме того, это работает только в PHP >= 5.6, а у меня PHP 5.4. 3. В интернете я встречал советы по перехвату __get. Но во-первых, это будет работать только с объектами (а я бы хотел универсальный дампер, подходящий и для массивов), а во-вторых, это чревато глюками и тормозами. 4. Встречал интересный подход, когда данные хранятся не в приватных переменных класса, а в статических переменных методов класса. Но это не очень удобно использовать. 5. Встречал также подход, когда для хранения данных используются анонимные функции, которые не сериализируются, но это тоже неудобно. В идеале мне нужно просто свойство "hide_private_values=true", может быть что-то такое готовое уже есть? ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 09:42 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B., странный вопрос. на то он и дамп чтоб выводить все что есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:02 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.но не хотелось бы городить свой дампер. не устраивает стандартный - пиши свой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:04 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
r uна то он и дамп чтоб выводить все что есть В чем странность? Допустим я не хочу, чтобы в var_dump($GLOBALS) было видно конфиденциальные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:12 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Допустим я не хочу, чтобы в var_dump($GLOBALS) было видно конфиденциальные данные. а как var_dump узнает что там конфиденциально а что нет? всякие protected и private это просто область видимости на уровне классов. дампу пох на это. он работает с внутренним представлением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:16 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.чтобы в var_dump($GLOBALS) было видно конфиденциальные данные. храни их зашифрованными или в другом месте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:21 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Изопропилхрани их зашифрованными или в другом месте Они мне нужны именно в классе, а не где-нибудь в другом месте. Кроме того, не везде я это могу контролировать — если в классе есть $dbh (пусть даже и приватный), то в дампе будут видны все параметры подключения, за исключением разве что пароля. Если делать так: Код: php 1. 2. 3. 4. 5. 6. и соответственно вместо $this->db использовать $this->db(), то это проблему решает. Но это не очень удобно. Кроме того, данные могут быть не конфиденциальными, но объемными (например большой массив), что затрудняет чтение дампа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:30 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Изопропилхрани их зашифрованными или в другом месте Они мне нужны именно в классе, а не где-нибудь в другом месте. Кроме того, не везде я это могу контролировать — если в классе есть $dbh (пусть даже и приватный), то в дампе будут видны все параметры подключения, за исключением разве что пароля. Если делать так: Код: php 1. 2. 3. 4. 5. 6. и соответственно вместо $this->db использовать $this->db(), то это проблему решает. Но это не очень удобно. Кроме того, данные могут быть не конфиденциальными, но объемными (например большой массив), что затрудняет чтение дампа. Не совсем понятно, что вы хотите скрыть? Параметры подключения в текущем классе? Используйте тогда singleton для подключения к базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:40 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Подключение к БД. «Соль» для хеша. Абсолютные пути к файлам. SQL-запросы. Много разной информации, которая будет использоваться внутри класса, но которую нежелательно показывать снаружи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 11:58 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Много разной информации, которая будет использоваться внутри класса, но которую нежелательно показывать снаружи. где снаружи? и кому? дампы долны видеть разработчики и админы, которые и так имеют доступ везде. или у вас дампы постоянно вываливаются простым посетителям сайта? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 12:01 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Подключение к БД. «Соль» для хеша. Абсолютные пути к файлам. SQL-запросы. Много разной информации, которая будет использоваться внутри класса, но которую нежелательно показывать снаружи. Не совсем понятно, что значит не показывать? Если хотите, что бы небыли доступны в клиентском интерфейсе, то делайте свойства и методы приватными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 12:05 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
r uили у вас дампы постоянно вываливаются простым посетителям сайта? )) Разумно будет подстраховаться. Нельзя исключать того, что какой-нибудь злоумышленник сможет выполнить на сервере phpinfo() или var_dump($GLOBALS), не получив при этом доступ к системе. Закрыть доступ извне к приватным свойствам модуля будет неплохой подстраховкой. kunaksergeyНе совсем понятно, что значит не показывать? Если хотите, что бы небыли доступны в клиентском интерфейсе, то делайте свойства и методы приватными. Они и сделаны приватными, и обратиться к $obj->dbh нельзя. Но если сделать var_dump($obj), то содержимое $obj->dbh будет отображено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 13:30 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Нельзя исключать того, что какой-нибудь злоумышленник сможет выполнить на сервере phpinfo() или var_dump($GLOBALS), не получив при этом доступ к системе. если злоумышленник может все это делать - то он может делать и еще много всего. и вардамп ему просто будет ненужен. он просто сольет себе конфиги с паролями и хакнет все до чего доберется. кастомный вардамп тут непоможет никаким боком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 13:36 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B., не морочте себе и другим голову. если вам чтото и нужно из этой епархии, то это серилизация данных и соответсвующий магический метод у класса. ну раз по версии вардампинфо не подходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 17:22 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Со странным поведением столкнулся. Есть трейт для инкапсуляции данных: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Есть класс Payment: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Используется это примерно так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Если строку с $payment->find закомментировать, то все работает нормально — данные сохраняются в БД. Но если использовать выше приведенный код, то $payment->save не срабатывает, поскольку $bm внутри этого метода не установлен. У меня есть предположение, что в PHP статические переменные (переменная $store внутри метода _store трейта PrivateStore) являются общими для всех экземпляров класса. Это так или нужно искать другую причину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 14:24 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.У меня есть предположение, что в PHP статические переменные (переменная $store внутри метода _store трейта PrivateStore) являются общими для всех экземпляров класса. facepalm. на то они и статические переменные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 17:51 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Статические переменные внутри методов разных объектов (а то и классов)? Это не очень логично. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Код: plaintext 1. 2. 3. 4. 5. 6. Признаться, я был уверен, что на третьей строке нумерация начнется сначала. Такая особенность PHP была неожиданной. Хорошо хоть, что в разных методах и разных классах статические переменные изолированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 18:09 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Признаться, я был уверен, что на третьей строке нумерация начнется сначала. почему? статическая переменная принадлежит классу/методу/функции а не экземпляру. все логично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 18:29 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B., статические переменные -это переменные класса, а не объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 18:31 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B., http://php.net/manual/ru/language.oop5.static.php достаточно прочитать хоть немного, и ненужно строить никаких фантастических догадок) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 18:34 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
r u http://php.net/manual/ru/language.oop5.static.php Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. Со свойствами и методами класса все понятно. Неожиданностью было то, что переменная внутри функции также рассматривается как статическая переменная класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 18:51 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Статические переменные внутри методов разных объектов (а то и классов)? Это не очень логично. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Код: plaintext 1. 2. 3. 4. 5. 6. Признаться, я был уверен, что на третьей строке нумерация начнется сначала. Такая особенность PHP была неожиданной. Хорошо хоть, что в разных методах и разных классах статические переменные изолированы. это не просто нормально и логично, это что называеть - ясень пень. класс - структурированый тип данных, который включает в себя набор функций,-определяют поведение, и поля, определяют состояние экземпляра класса. первое общее для класса(поведение) , второе индивидуальное для каждойго экземпляра(поля). внутрення реализация. упрощённо. в работающем коде, есть таблица методов. клас1 метод1-адрес1 метод2-адрес2 метод3-адрес3 клас2 ... описание типов класс1 поле1-тип1 поле2-тип2 поле3-тип3 класс2 .... хранение обьектов переменная1 класс1-адрес11 переменная2 класс1-адресс12 по адресу1 код-метода1 по адресу2 код-метода2 .... по адресу11 значение-поля1значение-поля2.... по адресу12 занчение-поля1значение-поля2.... из простенькой схемы видим. что для значения полей класса, используються разные ячейки оперативки, что же касаеться функций(методов) и всё что с ними связано, они храняться в единичном экземпляре в памяти, а когда ты пишешь переменная->метод() переменная->поле происходит разименовывание указателя на обьект для поля, идеться ссылка на данные обьекта(первый байт) и для нужного поля нужный адресс(технически, в описании класса для полей идёт - поле-тип-смещение. это смещение, равно смещению от первого байта участка памяти для обьекта, к первому байту значения данного поля) для методов аналогично, только идём в таблицу методов. и статическая переменная в функции, это часть функции, которая храниться в одной копии- не только для класса, но даже и для всех потомков, ибо в описании потомка, нет кода родительских методов, в этой таблице содержится ссылка на описание родителя, и при поиске нужного метода, если его нет в таблице класса, ищёться в родительском, и так до самого верхнего. (одна из пречин почему даже сишный оопшный код медленее работает) я к тому что пхп тут не причём, это и есть реализация ооп. общее поведение, индивидуальные поля. а то что ты хотел - это должно храниться в поле класса, если оно должно быть индивидуально, а не в статической переменной метода. ЗЫ статические переменный класса, реализованны как и методы класса побую какие - их описание и содержимое храниться в описании и содержимом класса, а в каждом обьекте есть лиш указание на это дело - потому оно и общее. ЗЫЗЫ есть есчо познее статическое связывание, как и виртуальные методы,есчё динамические(похоже на виртуальные, но реализация другая)...всё это выливаеться в то, что в описании родителя будет поле/метод, и в описании потомка будет тоже саммое. а как описано выше, поиск идёт по принципу - ищём в текущем классе, если нету то у родителя..но так как продублировано (познее статическое связывание, динамический метод, переопределение родительского метода) то к родителю уже поиск не пойдёт. === всё выше написано в целом, без привязки к пхп, более того, ввиду что пхп интерпретируемый язык а не компилируемый, там может быть даже по другому... но общая суть таже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2015, 23:28 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
В моем примере метод Foo не статический. Поэтому я и предполагал, что его внутреннее состояние (равно как и все его внутренние переменные, в том числе и статические) будут для каждого экземпляра класса свои. Это оказалось не так, буду теперь учитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 01:09 |
|
||
|
PHP - как скрыть приватные свойства в дампе?
|
|||
|---|---|---|---|
|
#18+
Alibek B.В моем примере метод Foo не статический. Поэтому я и предполагал, что его внутреннее состояние (равно как и все его внутренние переменные, в том числе и статические) будут для каждого экземпляра класса свои. Это оказалось не так, буду теперь учитывать. этим пхп сообщество грешит с первых дней своей жизни. сначала перепутать термины все, потом путаться в мыслях. новоприбывающим вообще без вариантов разобраться в этой куче. ваш метод фуу не статический, это метод класса, в пхп нет статичеких методов, точно также как нету свойсв у класов, есть только поля. но ...как уже сказал выше, желание понтануться дало слова, которые не позволяют возможности понять глубоко мысль(особеность сознания - человек легко понимаем мысль, если используються один и теже слова, а не куча разных слов, которые интуитивно несут разный смысл, вот любой понимает что свойство и поле это несколько разные вещи...поле, это место, ячейка, выделенный участок, свойство же - это способность, качество, черта... ну явно разные термины. использование их в пхп в перемешку приводит к тому что никто не задумывается, а что же это такое.... бквоска после стрелочки...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 11:57 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38895687&tid=1461939]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 407ms |

| 0 / 0 |
