php中动态调用说明
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-05 09:29:41 浏览: 评论:0
动态调用在php算是高级的东西了,今天我们来看看这高级的活是什么吧,先来分析一下判断什么是这个动态调用,有需要的朋友看看吧.
在程序中如果加一大堆判断的确是一个很大的麻烦,例如这样:
- if($fun=’a’){echo ”哎呀!”;}
- elesif(){}
- ……
- else{echo “嗯!”;};
真的很麻烦并且造成程序后期阅读和修改时候的巨大麻烦,这时候我们可以把每一个要执行的代码段,用函数来实现,然后可以用一个更加NB的方法来实现这些功能,并且因为每一个函数实现一个功能,我们维护起来就简单多了.
进入正题,看看PHP动态调用函数到底有什么作用,在PHP中是可以动态调用函数的,像这样$fun(),PHP解析器可以根据变量$fun的值来调用对用的函数,例如$fun=’a’,解析器看到的将是a();这样的形式,从而调用函数a,具体代码如下:
- <?php
- //程序来源:PHP iask http://www.phpfensi.com
- //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();
这样的代码是不是简洁很对呢?你可以把这些代码拷贝回去,自己看看效果——我肯定的告诉你,这些代码运行时正常的!
然而我也很不幸的告诉你:其实这段看起来整齐的代码有一个巨大的安全隐患在里面,很大,很大的安全隐患,具体是啥,留到明天10点钟准时上线的《关于PHP动态调用函数的安全问题》再说吧,你肯定不会把这一段代码立马用到服务器上吧?
另外经过测试证实,这个方法不但可以动态调用函数,并且也可以动态实例化对象,像这样:$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();
- //开源代码phpfensi.com
- $b->bar();//在对象$b中,A::foo();进行静态调用
- B::bar();
- ?>
总结:静态、动态调用都指类、对象对其方法的调用,动态指的是创建(new)了对象,然后用对象变量去调用方法;静态则是没有创建对象,直接用类名去调用,至于另一个对象那就很简单了,不同的类创建不同的对象,比如class A;class B ,$a = new A();$b = new B();$a and $b 相对之间就是另一个对象了.
Tags: php动态 php调用说明
相关文章
- ·PHP中动态特性学习笔记(2015-04-08)
- ·PHP加Nginx实现动态裁剪图片方案(2020-10-20)
- ·PHP中调用C/C++制作的动态链接库的教程(2021-07-13)
- ·PHP实现动态执行代码的方法(2021-07-21)
- ·PHP实现动态创建XML文档的方法(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)