こんにちは、さるまりんです。
これいいの?って驚いたので残しておきますね。
PHP
でclass
を作成。その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_r
やvar_dump
、var_export
などではその中身が表示されています。
いいんでしょうか?
private
を使ってるから安心しっぱなしでいると見えてしまっているよということですね。
何か足りないからこうなるのだと思いますが。。
理由がわかったらまたメモします。
読んでくださってありがとうございます。
ではまた!