日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php表示私有变量的是,PHP 访问私有和受保护的成员变量

發布時間:2023/12/20 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php表示私有变量的是,PHP 访问私有和受保护的成员变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

示例

反射通常用作軟件測試的一部分,例如在運行時創建/實例化模擬對象。這對于在任何給定時間點檢查對象的狀態也非常有用。這是在單元測試中使用Reflection來驗證受保護的類成員是否包含期望值的示例。

下面是一個非常基礎的汽車課。它具有受保護的成員變量,該變量將包含代表汽車顏色的值。由于成員變量受保護,因此我們無法直接訪問它,而必須使用getter和setter方法分別檢索和設置其值。

class?Car

{

protected?$color

public?function?setColor($color)

{

$this->color?=?$color;

}

public?function?getColor($color)

{

return?$this->color;

}

}

為了測試這一點,許多開發人員將創建一個Car對象,使用設置汽車的顏色,使用檢索顏色,并將該值與他們設置的顏色進行比較:Car::setColor()Car::getColor()

/**

*?@test

*?@covers?????\Car::setColor

*/

public?function?testSetColor()

{

$color?=?'Red';

$car?=?new?\Car();

$car->setColor($color);

$getColor?=?$car->getColor();

$this->assertEquals($color,?$reflectionColor);

}

從表面上看,這似乎還可以。畢竟,所有要做的就是返回protected成員變量的值。但是此測試在兩個方面存在缺陷:Car::getColor()Car::$color它執行的測試不在此測試范圍內Car::getColor()

這取決于哪個錯誤本身可能使測試具有錯誤的肯定或否定。Car::getColor()

讓我們看看為什么不應該在單元測試中使用,而應該使用Reflection。假設開發人員被分配了一項任務,以向每種汽車顏色添加“金屬”。因此,他們嘗試修改,以在汽車的顏色前添加“金屬”:Car::getColor()Car::getColor()

class?Car

{

protected?$color

public?function?setColor($color)

{

$this->color?=?$color;

}

public?function?getColor($color)

{

return?"Metallic?";?$this->color;

}

}

看到錯誤了嗎?開發人員使用分號代替串聯運算符,以使“ Metallic”成為汽車的顏色。結果,無論汽車的實際顏色是什么,只要被調用,都會返回“ Metallic”。結果,即使工作得很好并且不受此更改的影響,我們的單元測試也將失敗。Car::getColor()Car::setColor()Car::setColor()

那么,如何驗證Car::$color包含通過設置的值?我們可以使用Refelection直接檢查受保護的成員變量。那么我們該怎么做呢?我們可以使用Refelection使受保護的成員變量可被我們的代碼訪問,以便它可以檢索值。Car::setColor()

讓我們先看一下代碼,然后將其分解:

/**

*?@test

*?@covers?????\Car::setColor

*/

public?function?testSetColor()

{

$color?=?'Red';

$car?=?new?\Car();

$car->setColor($color);

$reflectionOfCar?=?new?\ReflectionObject($car);

$protectedColor?=?$reflectionOfForm->getProperty('color');

$protectedColor->setAccessible(true);

$reflectionColor?=?$protectedColor->getValue($car);

$this->assertEquals($color,?$reflectionColor);

}

這是我們使用Reflection獲取Car::$color上面代碼中的value的方式:我們創建一個新的ReflectionObject代表我們的Car對象

我們得到一個ReflectionProperty用于Car::$color(此“代表”Car::$color變量)

我們使Car::$color無障礙

我們得到的價值 Car::$color

如您所見,通過使用Reflection,我們可以得到的價值,Car::$color而不必調用可能導致無效測試結果的任何訪問器函數。現在,我們的單元測試安全且準確。Car::getColor()Car::setColor()

總結

以上是生活随笔為你收集整理的php表示私有变量的是,PHP 访问私有和受保护的成员变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。