内射老阿姨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ā)
临洮县| 翼城县| 永胜县| 邹城市| 芜湖县| 洛浦县| 河北区| 武宁县| 南投县| 新平| 拉萨市| 江安县| 五河县| 广州市| 和静县| 中山市| 连山| 河曲县| 夏津县| 诸城市| 保德县| 宝鸡市| 清流县| 东乌| 汉源县| 镇巴县| 崇州市| 琼结县| 于田县| 莲花县| 新宁县| 延长县| 深水埗区| 同心县| 宁海县| 揭西县| 伊金霍洛旗| 宝山区| 上饶市| 应城市| 成都市|