PHPのprivateな変数の中身が見えるよ!

こんにちは、さるまりんです。

これいいの?って驚いたので残しておきますね。

PHPclassを作成。そのprivate変数にアクセスしようとしたらエラーとなる。
いたって普通ですね。

しかし!ダンプするとその中身が見えてしまいました。

PHP

<?php

// クラスを定義
class SimpleSample
{
   // プロパティ
   private $A = 'I want to dance.';
   private $B = 'I want to sing.';
   private $C = 'I want to sleep.';
}

// クラスのインスタンを生成
$var = new SimpleSample();

// 出力してみる

// これはエラーになる
// echo $var->A;

// けど、これらはOK。
print_r($var);

var_dump($var);

var_export($var);

実行結果

php dump_class.php 
SimpleSample Object
(
    [A:SimpleSample:private] => I want to dance.
    [B:SimpleSample:private] => I want to sing.
    [C:SimpleSample:private] => I want to sleep.
)
object(SimpleSample)#1 (3) {
  ["A":"SimpleSample":private]=>
  string(16) "I want to dance."
  ["B":"SimpleSample":private]=>
  string(15) "I want to sing."
  ["C":"SimpleSample":private]=>
  string(16) "I want to sleep."
}
SimpleSample::__set_state(array(
   'A' => 'I want to dance.',
   'B' => 'I want to sing.',
   'C' => 'I want to sleep.',
))

18行目にあるように直接$var->Aのようにアクセスするとエラーになります。

が、print_rvar_dumpvar_exportなどではその中身が表示されています。

いいんでしょうか?

privateを使ってるから安心しっぱなしでいると見えてしまっているよということですね。
何か足りないからこうなるのだと思いますが。。
理由がわかったらまたメモします。

読んでくださってありがとうございます。

ではまた!