真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP中怎么獲取類私有屬性

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

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

PHP獲取類私有屬性的方式

1. 反射

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

namespace tlanyan;

class Foo {

private $bar = "Foo bar!";

}

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

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

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

// 設置屬性可訪問

$property->setAccessible(true);

$foo = new Foo;

// 獲取對象屬性值

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

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

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

// 輸出: Foo bar!

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

2. 轉換成數(shù)組

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

class Foo {

private $bar = "Foo bar!";

}

$foo = new Foo;

// 強制轉型

$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。編程時要用雙引號將其引起來。不能使用單引號,否則轉義失效,那就是兩個字符。如果你有C語言基礎,應該知道 \0 就是字符串的結束符。這個符號直接輸出不會顯示,但可以通過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的方式獲取。   與強制轉換成數(shù)組類似的另一種方法是serialize,但是serialize比較慢,并且序列化后的字符串更難辨認結構和處理,不建議使用。   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中怎么獲取類私有屬性,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:PHP中怎么獲取類私有屬性
轉載源于:http://weahome.cn/article/ggohsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部