php中的动态调用实例分析

2015-01-24信息快讯网

这篇文章主要介绍了php中的动态调用的使用技巧,实例分析了动态调用的具体用法与注意事项,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

php使用正则表达式获取图片url的方法
php使用CURL伪造IP和来源实例详解
php+mysql实现无限分类实例详解
php截取html字符串及自动补全html标签的方法
php在linux下检测mysql同步状态的方法
php中静态类与静态变量用法的区别分析
php+mysql查询优化简单实例
PHP针对JSON操作实例分析
php模拟登陆的实现方法分析
ucenter通信原理分析
WampServer下安装多个版本的PHP、mysql、apache图文教程
Zend Guard使用指南及问题处理
PHP实现检测客户端是否使用代理服务器及其匿名级别
php模拟用户自动在qq空间发表文章的方法
PHP中使用CURL获取页面title例子
PHP中调用SVN命令更新网站方法
PHP PDO fetch 模式各种参数的输出结果一览
PHP中使用php5-ffmpeg撷取视频图片实例
PHP中使用SimpleXML检查XML文件结构实例
php中$_POST与php://input的区别实例分析
php基于表单密码验证与HTTP验证用法实例
PHP中$this和$that指针使用实例
php缓冲输出实例分析
php支付宝接口用法分析
js+php实现静态页面实时调用用户登陆状态的方法
php静态文件生成类实例分析
php+mysql大量用户登录解决方案分析
php调用mysql存储过程实例分析
解决phpcms更换javascript的幻灯片代码调用图片问题
PHP调用MySQL存储过程并返回值的方法
CI框架给视图添加动态数据
ThinkPHP实现动态包含文件的方法
PHP判断一个gif图片是否为动态图片的方法
PHP动态页生成静态页的3种常用方法
php采用curl模仿登录人人网发布动态的方法
PHP静态调用非静态方法的应用分析
©2014-2024 dbsqp.com