Почему php добавляет нулевые байты к именам частных и защищенных свойств?


Я новичок в мире PHP и изучаю его у php.net . Я знаю, что при приведении объекта к массиву нулевой байт добавляется вокруг имен частных и защищенных свойств, когда Имя класса или ключ звездочки (*) добавляется к именам частных и защищенных свойств в ключах массива.

Но мой вопрос в том, что ПОЧЕМУ php добавляет нулевые байты В ЧЕМ причина?

Может ли кто-нибудь рассказать простыми и понятными словами.

Примеры очень поможет.

Спасибо

Author: deceze, 2017-08-18

1 answers

Суть private/protected свойства заключаются в том, что вы не должны получать к ним доступ извне самого класса. Это не мера безопасности или что-то в этом роде, это для обеспечения соблюдения контрактов между различными частями вашего кода. Когда вы отмечаете что-то как private/protected, вы явно заявляете, что эта вещь не предназначена для широкого общественного потребления, и никакой внешний код не должен быть связан с ней.

В основном это напоминание для вас и других разработчиков, и в худшем случае это будет дайте вам легкий шлепок по запястью, если вы ослушаетесь этого маркера; это ни в коем случае не железная защита. Существует множество способов обойти это, например, с помощью отражения. Но, если бы было сделано слишком легко для доступа к этим частным частям, разработчики, вероятно, делали бы это слева и справа и отрицали бы весь смысл.

Поскольку эти свойства включаются в массив при приведении объекта к массиву, по крайней мере, не сразу понятно, как к ним получить доступ непосредственно из-за добавленных байтов NUL. Если вы потратите время на то, чтобы выяснить, как получить к ним доступ, вы, надеюсь, действительно знаете, что делаете.

TL;DR: (я считаю) это минимальная попытка применить некоторые минимальные стандарты кодирования и не позволять новичкам нарушать все принципы ООП, как только они поймут, что такое приведение массива.

 4
Author: deceze, 2017-08-18 12:40:24