php中的动态调用实例分析


Posted in PHP onJanuary 07, 2015

本文实例讲述了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 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
PHP 类相关函数的使用详解
May 10 PHP
PHP加密函数 Javascript/Js 解密函数
Sep 23 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php密码生成类实例
Sep 24 PHP
php生成数字字母的验证码图片
Jul 14 PHP
Symfony2实现在doctrine中内置数据的方法
Feb 05 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
php 猴子摘桃的算法
Jun 20 PHP
Zend Guard使用指南及问题处理
Jan 07 #PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 #PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 #PHP
PHP中使用CURL获取页面title例子
Jan 07 #PHP
PHP中调用SVN命令更新网站方法
Jan 07 #PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 #PHP
PHP中使用php5-ffmpeg撷取视频图片实例
Jan 07 #PHP
You might like
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
JQuery之focus函数使用介绍
2013/08/20 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
关于PyTorch源码解读之torchvision.models
2019/08/17 Python
python路径的写法及目录的获取方式
2019/12/26 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
银行职员思想汇报
2013/12/31 职场文书
单位消防安全制度
2014/01/12 职场文书
物流专业求职信
2014/06/30 职场文书
教师暑期培训感言
2014/08/15 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
贷款承诺书
2015/01/20 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库