php中的动态调用实例分析
《PHP实例:php中的动态调用实例分析》要点: 本篇章节讲解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=aPHP编程 当哀求到达controller.php的时候,PHP程序将会自动的执行函数a().PHP编程 问题的重点:PHP编程 在于我们在这个程序的页面首先调用了controller()函数.这个函数首先判断参数中定义的函数名称($fun的值)是否被定义,如果定义了就调用这个函数.PHP编程 如果在$_GET参数中fun没有定义:http://localhost/controller.phpPHP编程 就调用一个缺省的函数def();PHP编程 这样的代码是不是简洁很对呢?你可以把这些代码拷贝回去,自己看看效果――我肯定的告诉你,这些代码运行时正常的!PHP编程 然而我也很不幸的告诉你:其实这段看起来整齐的代码有一个巨大的平安隐患在里面,很大,很大的平安隐患,具体是啥,感兴趣的朋友可以参考相关文档,相信你肯定不会把这一段代码立马用到服务器上的?PHP编程 另外经过测试证实,这个办法不但可以动态调用函数,并且也可以动态实例化对象,像这样: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(); $b->bar();//在对象$b中,A::foo();进行静态调用 B::bar(); ?> 总结:静态、动态调用都指类、对象对其办法的调用,动态指的是创建(new)了对象,然后用对象变量去调用办法;静态则是没有创建对象,至于另一个对象那就很简单了,不同的类创建不同的对象,比如class A;class B,$a = new A();$b = new B();$a and $b 相对之间就是另一个对象了. 希望本文所述对大家的php程序设计有所帮助.PHP编程 编程之家培训学院每天发布《PHP实例:php中的动态调用实例分析》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |