這篇文章主要為大家介紹了關於如何直接存取php實例物件中private屬性的相關資料,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
前言
本文主要介紹瞭如何直接存取php實例物件中private屬性的相關內容,在介紹關鍵部分之前,我們先回顧一下php物件導向的存取控制。
對屬性或方法的存取控制,是透過在前面新增關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。被定義為公有的類別成員可以在任何地方被存取。被定義為受保護的類別成員則可以被其本身以及其子類別和父類別存取。被定義為私有的類別成員則只能被其定義所在的類別存取。
類別屬性必須定義為公有,受保護,私有之一。如果用 var 定義,則視為公有。
請看下面範例程式碼(來自官方文件:http://php.net/manual/en/language.oop5.visibility.php
<?php /** * Define MyClass */ class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // Works echo $obj->protected; // Fatal Error echo $obj->private; // Fatal Error $obj->printHello(); // Shows Public, Protected and Private
如上面程式碼所示,我們用一個類別的實例物件存取一個類別的私有或受保護的成員屬性時,會拋出一個致命錯誤。要做的事情,存取php實例物件的私有屬性。
#public function getPrivate()
{
return $this->private;
}
事實是我們本來就應該這麼做。
##
<?php class A { private $a = 'self'; public function test() { $other = new self(); $other->a = 'other'; var_dump($other->a); } } $aa = new A(); $aa->test();如上程式碼所示,我們new了一個新的A物件出來,再給這個實例的私有屬性a賦值,竟然沒有報錯!
解釋:
因為同一個類別的物件即使不是同一個實例也可以互相存取對方的私有與受保護成員。以上是php實例物件中的private屬性如何直接存取?的詳細內容。更多資訊請關注PHP中文網其他相關文章!