国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

如何直接訪問php實例對象中的private屬性詳解

2024-09-04 11:43:52
字體:
來源:轉載
供稿:網友

本文主要介紹了關于如何直接訪問php實例對象中private屬性的相關內容,在介紹關鍵部分之前,我們先回顧一下php面向對象的訪問控制。

對屬性或方法的訪問控制,是通過在前面添加關鍵字 public(公有),protected(受保護)或 private(私有)來實現的。被定義為公有的類成員可以在任何地方被訪問。被定義為受保護的類成員則可以被其自身以及其子類和父類訪問。被定義為私有的類成員則只能被其定義所在的類訪問。

類屬性必須定義為公有,受保護,私有之一。如果用 var 定義,則被視為公有。

請看下面示例代碼(來自官方文檔:http://php.net/manual/en/language.oop5.visibility.php

  1. <?php 
  2. /** 
  3.  * Define MyClass 
  4.  */ 
  5. class MyClass 
  6.  public $public = 'Public'
  7.  protected $protected = 'Protected'
  8.  private $private = 'Private'
  9.   
  10.  function printHello() 
  11.  { 
  12.   echo $this->public
  13.   echo $this->protected
  14.   echo $this->private
  15.  } 
  16. //Vevb.com 
  17. $obj = new MyClass(); 
  18. echo $obj->public// Works 
  19. echo $obj->protected// Fatal Error 
  20. echo $obj->private// Fatal Error 
  21. $obj->printHello(); // Shows Public, Protected and Private 

如上面代碼所示,我們用一個類的實例對象訪問一個類的私有或者受保護的成員屬性時,會拋出一個致命錯誤。

下面是文章標題要做的事情,訪問php實例對象的私有屬性。

按照我們正常的做法,一般都會是寫一個public的方法,再返回這個屬性。

  1. public function getPrivate() 
  2.  return $this->private

事實是我們本就應該這樣做。

下面說是只是特殊場景下的使用方法,平時寫代碼希望大家不要亂來。

  1. <?php 
  2. class A { 
  3.  private $a = 'self'
  4.  public function test() { 
  5.   $other = new self(); 
  6.   $other->a = 'other'
  7.   var_dump($other->a); 
  8.  } 
  9.   
  10. $aa = new A(); 
  11. $aa->test(); 

如上代碼所示,我們new了一個新的A對象出來,再給這個實例的私有屬性a賦值,竟然沒有報錯!

解釋:因為同一個類的對象即使不是同一個實例也可以互相訪問對方的私有與受保護成員。這是由于在這些對象的內部具體實現的細節都是已知的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台安县| 县级市| 靖江市| 余姚市| 中方县| 丰台区| 汉源县| 巫山县| 邢台市| 酉阳| 大冶市| 阿拉善右旗| 洛扎县| 垣曲县| 泸州市| 泾源县| 吴江市| 巴东县| 保山市| 乐业县| 惠安县| 牡丹江市| 安康市| 西峡县| 福海县| 乐山市| 无棣县| 铁岭市| 庆城县| 武安市| 宿迁市| 柘城县| 青海省| 克东县| 钦州市| 汉阴县| 驻马店市| 托克逊县| 普陀区| 四子王旗| 阳城县|