печать r показывает частный var. Почему?
Почему print_r
может видеть частное свойство $версия , даже если его область действия установлена в частное ?
class myClass {
private $version;
public function set_version($value){
$this->version = $value;
}
}
$class = new myClass();
$class->set_version("1.2");
echo "<pre>";
print_r($class);
2 answers
Print_r() показывает свойства закрытого элемента для целей отладки. Он не должен использоваться для вывода объекта в целях отображения (например, в представлении/странице). Для отображения информации об объекте, вероятно, было бы целесообразно создать метод (например, toString), который вернет соответствующую информацию.
Print_r(), var_dump() и var_export() также будут отображаться защищенные и частные свойства объектов. Статические члены класса не будет показано.1
1http://php.net/manual/en/function.print-r.php#refsect1-function.print-r-description)
Кроме того, начиная с PHP 5.6.0 вы можете использовать __debuginfo(), что позволит вам переопределить или уточнить то, что print_r()
, var_dump()
результаты.
Так, например, используя кодирование и декодирование json, вы можете возвращать только общедоступные свойства.
<?php
class myClass {
private $private_var;
public $public_var = 'Foobar';
public function setPrivate($value)
{
$this->private_var = $value;
}
public function __debugInfo()
{
return json_decode(json_encode($this), true);
}
}
$class = new myClass();
$class->setPrivate("Baz");
print_r($class);
Результат:
myClass Object
(
[public_var] => Foobar
)