1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網營銷解決方案
      PHP中獲取類私有屬性的方法有哪些-創(chuàng)新互聯(lián)

      這期內容當中小編將會給大家?guī)碛嘘PPHP中獲取類私有屬性的方法有哪些,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

      創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網建設、營銷型網站制作、成都響應式網站建設、展示型成都網站設計、網站制作、外貿營銷網站建設等服務,幫助中小企業(yè)通過網站體現(xiàn)價值、有效益。幫助企業(yè)快速建站、解決網站建設與網站營銷推廣問題。

      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的拼接方式比較詭異,key規(guī)則如下:

      1. public屬性, key是 屬性名;

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

      3. 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. 閉包


      文章開頭的推特截圖已經展示了閉包的用法,其中call方法在PHP7中引入,另一個是PHP5.4引入的bindTocallbindTo的用法示例如下:

      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ù)應該放置在該類的作用域下,從而可以訪問私有屬性。

      總結

      性能: 數(shù)組 > 反射 > 閉包

      易用性: 閉包 > 數(shù)組 > 反射

      推薦: 閉包 > 反射 > 數(shù)組

      上述就是小編為大家分享的PHP中獲取類私有屬性的方法有哪些了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


      分享名稱:PHP中獲取類私有屬性的方法有哪些-創(chuàng)新互聯(lián)
      轉載來于:http://www.ef60e0e.cn/article/dghpid.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        永吉县| 忻州市| 乳源| 郓城县| 岱山县| 昌平区| 安福县| 泰安市| 平原县| 神木县| 柘荣县| 长丰县| 朝阳市| 江达县| 泾阳县| 哈巴河县| 岗巴县| 休宁县| 承德县| 沙雅县| 常山县| 新源县| 昔阳县| 锦州市| 炎陵县| 龙海市| 湖州市| 南开区| 长丰县| 达孜县| 普格县| 福贡县| 镇巴县| 陆河县| 蒙阴县| 揭阳市| 肇东市| 昔阳县| 乐清市| 伽师县| 栾城县|