簡體   English   中英

為什么PHP私有變量在擴展類時會公開

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM