2017-08-18 19 views
2

私はPHPワールドを初めて使い、php.netから学んでいます。オブジェクトを配列にキャストするとき、クラス名またはアスタリスクキー(*)が配列キーのプライベートプロパティおよびプロテクトプロパティ名の前に付加されていると、NULLおよびNULLがプライベートプロパティおよびプロテクトプロパティ名の周りに追加されることがわかります。なぜphpはprivateとprotectedのプロパティ名にnullバイトを追加しますか?

しかし、私の質問はWHY php add null bytes なぜが原因ですか?

誰でも簡単かつ簡単に言葉で伝えることができます。

例が多く役立ちます。

おかげ

答えて

4

private/protected性質のポイントは、クラス自体の外からそれらにアクセスすることになっていないということです。これはセキュリティ上の措置などではなく、コードの異なる部分間で契約を強制することです。 private/protectedというマークを付けると、このことは一般消費者向けではなく、外部コードを結合しないと明示的に宣言しています。

これは主にあなた自身や他の開発者に思い出させるもので、そのマーカーに反すると、最悪の場合には手首を軽くたたきます。それはいかなる手段によっても盾の保護ではありません。その周りにはいくつかの方法があります。反射を使用します。 しかし、の場合、が簡単ににアクセスすると、開発者はそれを左右に行い、全体のポイントを否定します。

オブジェクトを配列にキャストするときにこれらのプロパティが配列に含まれるため、少なくともNULバイトのためにオブジェクトに直接アクセスする方法はすぐにはわかりません。あなたがそれらにアクセスする方法を理解するために時間がかかるならば、うまくいけばあなたがしていることを本当に知っています。私は、最小限のコーディング基準を適用しようとする試みを最小限に抑え、アレイキャストが何であるか把握したら、初心者がすべてのOOP原則に違反することを許さないようにするための最小限の試みです。

+1

実際の理由は、異なるクラスで宣言された同じ名前のプロパティの明確化です。プライベートプロパティが含まれている場合、単一のオブジェクト上に同じ名前の複数のプロパティを持つことができます。 – NikiC

+0

@ NikiC具体的には 'NUL'バイトはなぜですか、これは既にアスタリスクが追加されていますか? – deceze

+1

先頭のヌルバイトは、パブリックプロパティと非パブリックプロパティを簡単に区別する方法です。クラス名の後のヌルバイトは、クラス名が明示的なコピーを必要とせずにヌル終了文字列として使用可能であることを確認します。通常、PHPは一般にnullバイトを使用して、匿名クラス名、create_function関数など、さまざまな特別な名前と予約された名前を表します。 – NikiC

関連する問題