<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 反射機制(補充部分內容) ### 反射返回的是一個類 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token6">// var_dump(\A::class);// string(1) "A" object(A)#36 (0) { }</span> $obj <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>A</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($obj); // object(A)#34 (0) { }</span> $obj1 <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionClass</span><span class="token1">(</span>$obj<span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($obj1); // object(ReflectionClass)#35 (1) { ["name"]=> string(1) "A" }</span> <span class="token3">var_dump</span><span class="token1">(</span>$obj1<span class="token">-</span><span class="token">></span><span class="token3">newInstance</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span><span class="token6">// object(A)#36 (0) { }</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ### 反射機制 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> $obj <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>A</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($obj); // 輸出一個A類的對象</span> <span class="token6">//建立A類的一個反射類</span> $obj2 <span class="token">=</span><span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionClass</span><span class="token1">(</span>$obj<span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($obj2);</span> <span class="token6">/** * 上面返回 * object(ReflectionClass)#35 (1) { ["name"]=> string(1) "A" } */</span> $instance <span class="token">=</span> $obj2<span class="token">-</span><span class="token">></span><span class="token3">newInstance</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span><span class="token6">// 相當于實例化了這個類 ReflectionClass::newInstance — 從指定的參數創建一個新的類實例</span> <span class="token6">// var_dump($instance); // 返回 一個對象 和最開始返回的一樣</span> <span class="token6">// 獲取實例化對象的所有方法 ReflectionClass::getMethods — 獲取方法的數組</span> $<span class="token5">M</span> <span class="token">=</span> $obj2<span class="token">-</span><span class="token">></span><span class="token3">getMethods</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($M);</span> <span class="token6">/** * 輸出 * array(2) { [0]=> object(ReflectionMethod)#37 (2) { ["name"]=> string(3) "aaa" ["class"]=> string(1) "A" } [1]=> object(ReflectionMethod)#38 (2) { ["name"]=> string(3) "bbb" ["class"]=> string(1) "A" } } */</span> <span class="token6">// 獲取所有注釋</span> <span class="token3">foreach</span> <span class="token1">(</span>$<span class="token5">M</span> <span class="token2">as</span> $method<span class="token1">)</span><span class="token1">{</span> <span class="token3">var_dump</span><span class="token1">(</span>$method<span class="token">-</span><span class="token">></span><span class="token3">getDocComment</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token6">/** *就會返回string(39) "/** * @return a的注釋 */</span><span class="token6">/** * @return 這是b的注釋 */</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ### 調用方法 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> $obj <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>A</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> $obj2 <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionClass</span><span class="token1">(</span>$obj<span class="token1">)</span><span class="token1">;</span> <span class="token6">// 方法一</span> $instance <span class="token">=</span> $obj2<span class="token">-</span><span class="token">></span><span class="token3">newInstance</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// var_dump($instance->aaa(1,2));</span> <span class="token6">// 方法二</span> $method <span class="token">=</span> $obj2<span class="token">-</span><span class="token">></span><span class="token3">getMethod</span><span class="token1">(</span><span class="token4">'aaa'</span><span class="token1">)</span><span class="token1">;</span> echo $method<span class="token">-</span><span class="token">></span><span class="token3">invokeArgs</span><span class="token1">(</span>$instance<span class="token1">,</span><span class="token1">[</span><span class="token4">'mm'</span><span class="token1">,</span><span class="token4">'n'</span><span class="token1">]</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ### 判斷某個方法是公用還是私有 ``` <pre class="calibre13">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> $obj <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>A</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> $obj2 <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionClass</span><span class="token1">(</span>$obj<span class="token1">)</span><span class="token1">;</span> <span class="token6">// 方法一</span> $instance <span class="token">=</span> $obj2<span class="token">-</span><span class="token">></span><span class="token3">newInstance</span><span class="token1">(</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// 相當于實例化這個類</span> <span class="token6">// var_dump($instance->aaa(1,2));</span> <span class="token6">// 方法二</span> <span class="token6">//$method = $obj2->getMethod('aaa');</span> <span class="token6">// echo $method->invokeArgs($instance,['mm','n']);</span> <span class="token6">// 方法三 只能調用不帶參數的</span> <span class="token6">// $method = $obj2->getMethod('bbb');</span> <span class="token6">// echo $method->invoke($instance);</span> <span class="token6">// 判斷某個方法是私有還是公共的 注意要傳入obj</span> $method <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionMethod</span><span class="token1">(</span>$obj<span class="token1">,</span><span class="token4">'bbb'</span><span class="token1">)</span><span class="token1">;</span> <span class="token3">var_dump</span><span class="token1">(</span>$method<span class="token">-</span><span class="token">></span><span class="token3">isPublic</span><span class="token1">(</span><span class="token1">)</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` ### 反射機制補充 ``` <pre class="calibre14">``` <span class="token"><</span><span class="token">?</span>php namespace app\index\controller<span class="token1">;</span> <span class="token2">class</span> <span class="token3">Index</span> <span class="token1">{</span> <span class="token2">public</span> <span class="token2">function</span> <span class="token3">index</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token6">// var_dump(\A::class);// string(1) "A" object(A)#36 (0) { }</span> <span class="token6">//$obj = new \A();</span> <span class="token6">// var_dump($obj); // object(A)#34 (0) { }</span> <span class="token6">//$obj1 = new \ReflectionClass($obj);</span> <span class="token6">//var_dump($obj1); // object(ReflectionClass)#35 (1) { ["name"]=> string(1) "A" }</span> <span class="token6">// var_dump($obj1->newInstance());// object(A)#36 (0) { }</span> <span class="token6">//$obj2 = new \ReflectionClass('\A');</span> <span class="token6">//var_dump($obj2); //object(ReflectionClass)#34 (1) { ["name"]=> string(1) "A" }</span> $obj3 <span class="token">=</span> <span class="token2">new</span> <span class="token3"><span class="token1">\</span>ReflectionClass</span><span class="token1">(</span><span class="token4">'A'</span><span class="token1">)</span><span class="token1">;</span> <span class="token3">var_dump</span><span class="token1">(</span>$obj3<span class="token1">)</span><span class="token1">;</span> <span class="token6">// object(ReflectionClass)#34 (1) { ["name"]=> string(1) "A" }</span> <span class="token6">/** * @ yue 創建新的反射類的時候參數可為包含類名的字符串 或者 類的對象 * 結果都是一樣的 如上圖所示 */</span> <span class="token1">}</span> <span class="token1">}</span> ``` ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看