中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在php項目中實現動態調用

發布時間:2021-01-14 15:01:43 來源:億速云 閱讀:141 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在php項目中實現動態調用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在程序中如果加一大堆判斷的確是一個很大的麻煩,例如這樣:

復制代碼 代碼如下:

if($fun='a'){echo "哎呀!";}
elesif(){}
……
else{echo "嗯!";}


真的很麻煩并且造成程序后期閱讀和修改時候的巨大麻煩,這時候我們可以把每一個要執行的代碼段,用函數來實現,然后可以用一個更加NB的方法來實現這些功能,并且因為每一個函數實現一個功能,我們維護起來就簡單多了.

進入正題,看看PHP動態調用函數到底有什么作用,在PHP中是可以動態調用函數的,像這樣$fun(),PHP解析器可以根據變量$fun的值來調用對用的函數,例如$fun='a',解析器看到的將是a();這樣的形式,從而調用函數a,具體代碼如下:

復制代碼 代碼如下:

<?php
//controller.php
(isset($_GET['fun'])&&$_GET['fun']!='')?$fun=$_GET['fun']:$fun='def';
 
controller($fun);
 
function controller($fun){
     if(function_exists($fun)) $fun();
     else echo "函數{$fun}未定義";
}
 
function def(){
     echo "由于用戶沒有傳遞參數,調用了缺省的函數def()";
}
function a(){
    echo "函數a被調用!";
}
function b(){
    echo "函數b被調用!";
}
?>


實例代碼如下:

復制代碼 代碼如下:

<?php
 require_once showErrMsg.php;
 $_action = (isset($_REQUEST[action])?$_REQUEST[action]:"");
 if($_action!=null&&$_action!=){
  if(function_exists($_action)){
   eval("$_action();");
  }else{
   die(showErrMsg ( "<br>當前php文件中不存在方法[<b>".$_action."()</b>]。"));
  }
 }
?>
 
<?php
function showErrMsg($strMsg){
  return "<font color=red>".$strMsg."</font>";
 }
?>


在前臺頁面我們可以用不同的鏈接來實現不同的功能,例如我們有這樣一個鏈接

http://localhost/controller.php?fun=a

當請求到達controller.php的時候,PHP程序將會自動的執行函數a().

問題的重點:

在于我們在這個程序的頁面首先調用了controller()函數。這個函數首先判斷參數中定義的函數名稱($fun的值)是否被定義,如果定義了就調用這個函數。

如果在$_GET參數中fun沒有定義:http://localhost/controller.php

就調用一個缺省的函數def();

這樣的代碼是不是簡潔很對呢?你可以把這些代碼拷貝回去,自己看看效果——我肯定的告訴你,這些代碼運行時正常的!

然而我也很不幸的告訴你:其實這段看起來整齊的代碼有一個巨大的安全隱患在里面,很大,很大的安全隱患,具體是啥,感興趣的朋友可以參考相關文檔,相信你肯定不會把這一段代碼立馬用到服務器上的?

另外經過測試證實,這個方法不但可以動態調用函數,并且也可以動態實例化對象,像這樣:

復制代碼 代碼如下:

$obj = new $obj();

代碼如下:

復制代碼 代碼如下:

<?php
class A
{
      function foo()
      {
          if (isset($this)) {
              echo '$this is defined (';
              echo get_class($this);
              echo ")n";
          } else {
              echo "$this is not defined.n";
          }
      }
}
 
class B
{
      function bar()
      {
        A::foo();
         //parent::foo();
      }
}
 
$a = new A();
$a->foo();//動態調用,因為new了對象
A::foo();//靜態調用,直接用類名去調用,沒有new對象
$b = new B();
$b->bar();//在對象$b中,A::foo();進行靜態調用
B::bar();
?>


總結:靜態、動態調用都指類、對象對其方法的調用,動態指的是創建(new)了對象,然后用對象變量去調用方法;靜態則是沒有創建對象,直接用類名去調用,至于另一個對象那就很簡單了,不同的類創建不同的對象,比如class A;class B ,$a = new A();$b = new B();$a and $b 相對之間就是另一個對象了.

上述就是小編為大家分享的怎么在php項目中實現動態調用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

从江县| 肥城市| 大埔县| 石城县| 登封市| 临漳县| 洛隆县| 武定县| 溆浦县| 武功县| 石城县| 公安县| 美姑县| 大埔区| 温州市| 洛阳市| 英德市| 龙门县| 云阳县| 黔西| 安平县| 祁门县| 九江县| 芦溪县| 克东县| 怀柔区| 榆林市| 婺源县| 汤原县| 安康市| 中牟县| 家居| 舞钢市| 兴安盟| 海南省| 滦平县| 筠连县| 汾阳市| 汉川市| 巧家县| 赞皇县|