[英]Why is PHP private variables got public when extended class
我創建了以下PHP PHP 5.5版
abstract class Model
{
var $id;
private $cName;
private $tName;
public function __construct($id = 0)
{
$this->cName = 'Im cName';
$this->tName = 'Im tName';
}
}
然后是擴展課程
class claseExtend extends Model
{
var $id;
public function hola()
{
$this->id = 1;
return (array) $this;
}
}
如果我執行此操作:
$obj = new claseExtend() ;
$retHola =$obj->hola();
print_r($retHola);
我期待得到:array(id => 1)
但輸出是:array(\\ u0000Model \\ u0000cName:=>'Im cName',\\ u0000Model \\ u0000tName =>'Im tName')
我做錯了什么,或者如果屬性是私有的,為什么會發生這種情況?
¿為什么數組轉換包含私有屬性?
謝謝你的幫助。
print_r
是一個特殊的魔術函數,它將顯示包含私有和受保護屬性的類。 這是一個調試實用程序功能。 引自手冊 :
print_r()
,var_dump()
和var_export()
也將顯示PHP 5對象的受保護和私有屬性。將不顯示靜態類成員。
在PHP中,私有屬性在派生類中繼承,但它們不可訪問。
將對象強制轉換為數組時,結果中包含private和protected屬性。 文件說:
如果將對象轉換為數組,則結果是一個數組,其元素是對象的屬性。 鍵是成員變量名,有一些值得注意的例外:整數屬性是不可訪問的; 私有變量的類名前置於變量名; 受保護的變量在變量名前面加上'*'。 這些前置值在任一側都有空字節。
這些空字節在結果中顯示為\
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.