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 相关文章推荐
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
php输出金字塔的2种实现方法
Dec 16 PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 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函数)
2006/10/09 PHP
用PHP与XML联手进行网站编程代码实例
2008/07/10 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
js数组的操作详解
2013/03/27 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
python正则表达式match和search用法实例
2015/03/26 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Django框架模板的使用方法示例
2019/05/25 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
flask框架蓝图和子域名配置详解
2020/01/25 Python
Python 去除字符串中指定字符串
2020/03/05 Python
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
婚礼主持词
2014/03/13 职场文书
计生个人工作总结
2015/02/28 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Github 使用python对copilot做些简单使用测试
2022/04/14 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python