内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

PHP中怎么獲取類私有屬性

本篇文章為大家展示了PHP中怎么獲取類私有屬性,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供大觀企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為大觀眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。

PHP獲取類私有屬性的方式

1. 反射

反射可以獲取類的詳細信息,要獲取私有屬性的值,只需將對應屬性的ReflectionProperty實例設(shè)置為可訪問再取值即可。示例代碼如下:

namespace tlanyan;

class Foo {

private $bar = "Foo bar!";

}

// 獲取反射類及反射屬性

$class = new \ReflectionClass(Foo::class);

$property = $class->getProperty("bar");

// 設(shè)置屬性可訪問

$property->setAccessible(true);

$foo = new Foo;

// 獲取對象屬性值

// 注意:只能通過 ReflectionProperty 實例的 getValue 方法訪問

// 不能這樣直接訪問: $foo->bar;

echo $property->getValue($foo), PHP_EOL:

// 輸出: Foo bar!

本人之前寫過“PHP回顧之反射”一文,比較詳細的介紹了反射及用法,有興趣的閱讀參考。

2. 轉(zhuǎn)換成數(shù)組

這種方法用將對象強制轉(zhuǎn)換成數(shù)組,再通過鍵獲取其值。示例代碼如下:

class Foo {

private $bar = "Foo bar!";

}

$foo = new Foo;

// 強制轉(zhuǎn)型

$attrs = (array)$foo;

// 拼接key,注意 "\0" 不能改成單引號!

$key = "\0" . Foo::class . "\0" . "bar";

echo $attrs[$key], PHP_EOL;

// 輸出: Foo bar!

上述代碼中key的拼接方式比較詭異,根據(jù)鳥哥“深入理解PHP原理之對象(一)”文中的信息,key規(guī)則如下:

public屬性, key是 屬性名;

protected屬性,key是 \0*\0屬性名;

private屬性, key是 \0類名\0屬性名。

注意 \0 是一個字符(不是兩個),對應的ASCII碼是數(shù)字0。編程時要用雙引號將其引起來。不能使用單引號,否則轉(zhuǎn)義失效,那就是兩個字符。如果你有C語言基礎(chǔ),應該知道 \0 就是字符串的結(jié)束符。這個符號直接輸出不會顯示,但可以通過strlen或者ord讓其現(xiàn)形:

foreach ($attrs as $key => $value) {

echo "key:$key", ", key length:", strlen($key), ", ascii: ";

for ($i = 0; $i < strlen($key); ++ $i) {   echo ord($key[$i]), " ";   }   echo PHP_EOL;   }   // 輸出   // key:Foobar, key length:8, ascii: 0 70 111 111 0 98 97 114   // Foobar 有6個字符,加上兩個不顯示字符,所以長度是8   還需要注意拼接private屬性時類名應該是 “完全限定類名” ,建議通過Foo::class的方式獲取。   與強制轉(zhuǎn)換成數(shù)組類似的另一種方法是serialize,但是serialize比較慢,并且序列化后的字符串更難辨認結(jié)構(gòu)和處理,不建議使用。   3. 閉包   文章開頭的推特截圖已經(jīng)展示了閉包的用法,其中call方法在PHP7中引入,另一個是PHP5.4引入的bindTo。call和bindTo的用法示例如下:   namespace tlanyan;   class Foo {   private $bar = "Foo bar!";   }   $foo = new Foo;   // 閉包(匿名函數(shù))是PHP5.3引入的功能   $closure = function() { return $this->bar; };

// PHP5.4起支持bindTo方法

$method = $closure->bindTo($foo, Foo::class);

echo $method(), PHP_EOL;

// PHP7引入call方法,可綁定this直接執(zhí)行

echo $closure->call($foo), PHP_EOL;

bindTo方法的第二個參數(shù)注意傳入對象的 “完全限定類名”,指示函數(shù)應該放置在該類的作用域下,從而可以訪問私有屬性。

上述內(nèi)容就是PHP中怎么獲取類私有屬性,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當前題目:PHP中怎么獲取類私有屬性
URL鏈接:http://www.rwnh.cn/article38/ggohsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司全網(wǎng)營銷推廣、品牌網(wǎng)站制作、ChatGPT、App開發(fā)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
呼伦贝尔市| 兴安盟| 乌鲁木齐县| 安义县| 舞阳县| 固安县| 东乌珠穆沁旗| 铜梁县| 英吉沙县| 乌审旗| 利津县| 连城县| 福贡县| 丹江口市| 漳平市| 泸州市| 长子县| 阜宁县| 游戏| 德阳市| 泰州市| 黑山县| 隆林| 扶风县| 沐川县| 平塘县| 波密县| 深州市| 台东县| 扎兰屯市| 安龙县| 临泉县| 漳平市| 图片| 松潘县| 隆子县| 长沙市| 阿拉善盟| 防城港市| 灵川县| 修文县|