首页 > 后端开发 > 正文

php框架调用 php 框架 怎么使用回调函数

2023-09-04 09:47:14 | 我爱编程网

在平时的学习生活当中,对于后端开发一定都很关心,今天我爱编程网小编为大家整理了php框架调用 php 框架 怎么使用回调函数,希望能够帮助到大家。

php框架调用 php 框架 怎么使用回调函数

使用thinkPHP3.2.3框架调用验证码不显示 应该怎么解决

缺少src="{:U('Admin/Index/show')}"
设置 'URL_ROUTER_ON'=>true,
阻止submit提交行为、用js设置了e.preventDefault(); 可还会提交上去。
<form onsubmit="return false" id="form">
或者用JS绑定onsubmit="javascript:submit()"做都行
function submit(){
return false;
}
还有就是__PUBLIC__/js/jquery-*.js 这个路径写错

更多问题到问题求助专区( )

php框架调用 php 框架 怎么使用回调函数

php 框架 怎么使用回调函数

前言
最近在开发一个PHP系统,为了提高系统的扩展性,我想在系统中加入类似Javascript的事件处理机制,例如:我想在一篇新闻被添加以后,我想记录一下日志,用类似Javascript的代码,应该是这样写的:
function fnCallBack( $news )
{
//将$news的信息记录到日志中
writeLog( $news->getTitle().' has been added successfully!');
}
$newsEventManager->addEventListener( 'add' , fnCallBack );
其中,fnCallBack函数是回调函数,addEventListener表示监听newsEventManager的add事件。当一篇news被add以后,系统就会调用fnCallBack函数,从而完成writeLog的动作。
但是,PHP中的函数传递方法和Javascript有很大的不同。在Javascript中,函数也是对象,它可以很方便的当作参数传递,但是PHP不行。
$newsEventManager->addEventListener( 'add' , fnCallBack );
上面这行代码中的fnCallBack,看上去好像是那个函数的句柄,但实质上它是一个字符串,并不是我们所要的函数。
为了实现我们的事件模型,有必要研究一下PHP的回调函数的实现方法。
全局函数的回调
这里的全局函数的意思,是直接使用function定义的函数,它不包含在任何对象或类之中。请看下面的例子
示例代码
function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( $fnName , $params );
代码说明:
这里使用了PHP内置的函数call_user_func_array来进行调用。call_user_func_array有两个参数,第1个参数是一个字符串,表示要调用的函数名,第2个参数是一个数组,表示参数列表,按照顺序依次会传递给要调用的函数。
效果如下:
类的静态方法的回调
如果我们要回调的方法,是一个类的静态方法,那怎么办呢?我们依然可以利用PHP内置的call_user_func_array方法来进行调用,请看示例:
示例代码:
class MyClass
{
public static function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$className = 'MyClass';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $className , $fnName ) , $params );
代码说明:
这段代码和第1种方法的代码很相似,我们将类名(MyClass)也作为call_user_func_array的第1个参数传递进去,就可以实现类的静态方法的回调了。注意,这时call_user_func_array的第1个参数是一个数组了,数组的第1个元素是类名,第二个元素是要调用的函数名
运行结果:
(其实和第1种方法的结果是一样的 ^_^ )
继续研究
如果我用这种方法调用一个类的非静态方法(也就是把static去掉),会出现什么结果呢?请看下面代码
class MyClass
{
public function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$className = 'MyClass';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $className , $fnName ) , $params );
运行结果
和前面的结果还是一样的。。。
现在我为这个类添加一点属性,并在方法中引用
class MyClass
{
private $name = 'abc';
public function fnCallBack( $msg1 , $msg2 )
{
echo 'object name:'.$this->name;
echo "<br />\n";
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$className = 'MyClass';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $className , $fnName ) , $params );
运行结果
出现解析错误,提示$this没有在对象环境下出现,说明这个方法不能用类来调用,而是要用对象来调用。那我们就修改一下代码,创建一个对象:
class MyClass
{
public function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$myobj = new MyClass();
$className = 'myobj';
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
call_user_func_array( array( $className , $fnName ) , $params );
运行结果:
提示call_user_func_array的第1个参数非法,也就是说,调用失败。看来我们不能用call_user_func_array方法来回调一个对象的方法了,那么如何实现对象方法的回调的?
对象的方法的回调
我先用最原始的字符串形式的调用方法尝试了一下,如下所示:
class MyClass
{
private $name = 'abc';
public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
{
echo 'object name:'.$this->name;
echo "<br />\n";
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
$myobj->$fnName();
成功了,输出结果
调用是成功了,不过如何把参数params传给这个方法呢,如果把params直接传进去,那么它会作为1个参数,怎么把params拆开来传进去呢?
查了下PHP手册,找到了create_function函数,这个方法可以用字符串来创建一个匿名函数,好,有思路了,可以创建一个匿名的函数,在这个匿名函数中,调用我们的回调函数,并把参数传进去。
我先手动创建一个匿名函数anonymous,在这个函数中,用前面试出来的方法调用回调函数,如下所示:
class MyClass
{
private $name = 'abc';
public function fnCallBack( $msg1 = 'default msg1' , $msg2 = 'default msg2' )
{
echo 'object name:'.$this->name;
echo "<br />\n";
echo 'msg1:'.$msg1;
echo "<br />\n";
echo 'msg2:'.$msg2;
}
}
$myobj = new MyClass();
$fnName = "fnCallBack";
$params = array( 'hello' , 'world' );
function anonymous()
{
global $myobj;
global $fnName;
global $params;
$myobj->$fnName( $params[0] , $params[1] );
}
anonymous();
成功了,可以看到,对象的属性name也输出来了
然后,我用create_function来创建这个匿名函数,同时,代码中的params[0],params[1]应该是动态生成的,代码如下:
$strParams = '';
$strCode = 'global $myobj;global $fnName;global $params;$myobj->$fnName(';
for ( $i = 0 ; $i < count( $params ) ; $i ++ )
{
$strParams .= ( '$params['.$i.']' );
if ( $i != count( $params )-1 )
{
$strParams .= ',';
}
}
$strCode = $strCode.$strParams.");";
$anonymous = create_function( '' , $strCode);
$anonymous();
这段代码可以定义一个匿名函数,并保存在$anonymous变量中,最后调用这个$anonymous,实现了方法的回调,如图
PHP事件模型(观察者模式)的实现思路
至此,PHP中的3种常见的函数类型(全局函数,类静态函数,对象的方法)都可以回调了,可以实现文章一开始说的事件模型了 :)
事件模型模仿Firefox的Javascript实现,有3个方法,分别是
addEventListener:注册一个事件上的响应回调函数
removeEventListener:删除一个事件上的响应回调函数
fire:触发一个事件,也就是循环调用所有响应这个事件的回调函数
不过,由于第2、第3种方法需要传递上下文(也就是类名和对象名),所以addEventListener和removeEventListener应该有3个参数,我是这样设计的:
function addEventListener( $evtName , $handler , $scope = null )
第1个参数表示事件名,字符串类型
第2个参数表示回调函数名,字符串类型
第3个参数$scope是上下文环境,一共有3种类型,null表示传入的handler函数是一个全局函数,字符串类型表示传入的handler函数是scope类的静态函数,对象类型表示传入的scope是一个对象,handler函数是对象的一个方法。
function fire( $evtName , $params = null )
这个方法内,会读取出所有响应evtName的handler,然后判断它对应的scope,如果是null,则用本文第1种方法回调,如果是字符串,则用本文第2种方法回调,如果是对象,则用本文第3种方法回调。这样,一个PHP的事件模型就可以实现了,而且可以将回调函数放在某个对象中。

php框架调用 php 框架 怎么使用回调函数

thinkphp框架安装后怎么用

thinkphp框架安装后使用方法:

1、ThinkPHP最新版本可以在官方网站下载。

2、下载后的压缩文件解压到WEB目录(或者任何目录都可以),框架的目录结构为:

├─ThinkPHP.php     框架入口文件 我爱编程网

├─Common 框架公共文件

├─Conf 框架配置文件

├─Extend 框架扩展目录

├─Lang 核心语言包目录

├─Lib 核心类库目录

│  ├─Behavior 核心行为类库

│  ├─Core 核心基类库

│  ├─Driver 内置驱动

│  │  ├─Cache 内置缓存驱动

│  │  ├─Db 内置数据库驱动

│  │  ├─TagLib 内置标签驱动

│  │  └─Template 内置模板引擎驱动

│  └─Template 内置模板引擎

└─Tpl 系统模板目录

注意,框架的公共入口文件ThinkPHP.php是不能直接执行的,该文件只能在项目入口文件中调用才能正常运行,这是很多新手很容易犯的一个错误。

3、接下来先在WEB根目录下面创建一个app子目录(这个就是app就是项目名),然后在该目录下面创建一个index.php文件,添加一行简单的代码:

<?php

require '/ThinkPHP框架所在目录/ThinkPHP.php';

这行代码的作用就是加载ThinkPHP框架的入口文件ThinkPHP.php,这是所有基于ThinkPHP开发应用的第一步。然后,在浏览器中访问这个入口文件。

欢迎界面如下:

以上就是关于php框架调用 php 框架 怎么使用回调函数的全部内容了,如果需要了解更多相关资讯敬请关注我爱编程网。
与“php框架调用 php 框架 怎么使用回调函数”相关推荐
php框架内函数调用 php调用自定义函数
php框架内函数调用 php调用自定义函数

关于php调用函数问题1.递推2.回归递推:递推为正向的推导,即从前向后的分析问题,寻找递推的条件。1-3求和为例sum(1)=1+0sum(2)=2+1sum(3)=3+2+1可发现sum(1)=1+0sum(2)=2+sum(2-1)sum(3)=3+sum(3-1)这样一来把求sum(3)转为求sum(2)的把求sum(2)的转为求sum(1

2023-09-16 14:45:15
php框架异步调用 如何使用fsockopen函数实现异步执行PHP
php框架异步调用 如何使用fsockopen函数实现异步执行PHP

如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)_jqueryECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息。ECharts官网提供了中国地图、世界地图等地图数据下载,通过js引入或异步加载json文件的形式调用地图。效果演示源码下载本文将结合实例讲解如何使用PHP+jQuery+MySQL实现异步加载EC

2023-09-17 21:08:05
php框架调用代码 php怎么调用html
php框架调用代码 php怎么调用html

html中调用PHP代码.首先,第一种写法那是肯定错误的,php不能在&lt;?php?&gt;中再嵌套一个php标签。第二种肯本没看过的写法,都拆的不成样子了。第三种你到时候可以试试,或者麻烦点你可以先把$show_category_name;赋值给另一个名称,然后&lt;?php$show_name=$show_category_name;?&gt;value="&lt;?phpec

2023-09-09 02:55:39
layui前段框架使用php函数 layui框架怎么使用
layui前段框架使用php函数 layui框架怎么使用

layui数据表格使用的几个技巧使用表格组件能提高大量的开发效率,目前主流的数据表格组件有bootstraptable、layuitable、easyUItable等,本教程推荐使用layui框架设置数据表格。推荐:layui框架快速入门一、三种初始化渲染方式我先从最简单的初始化表格写起,如果我直接把全部代码帖出来,你们可能会看得头晕1,方法渲染:&lt;tablecl

2023-09-26 00:28:02
php封装好的框架调怎么用 php开发框架的使用PHP框架
php封装好的框架调怎么用 php开发框架的使用PHP框架

php开发框架的使用PHP框架开发者可能出于不同的考虑而使用PHP开发框架,不过首当其冲的原因是为了加速开发过程。相似工程之间的代码重用能够节省开发者大量的时间和精力。PHP开发框架内置了预建的模块,免去了冗长又令人厌烦的编程工作。这样开发者就能够把时间花在开发实际程序上,而不是每一次都要为每一个项目重建基础模块。稳定性是开发者使用框架的另一个重要原因。尽管简单是PHP最大的资本,也是

2023-10-06 13:16:38
php框架调用html html网页怎么调用php文件
php框架调用html html网页怎么调用php文件

怎样在一个PHP页面中插入html静态页面?用ajax异步回传,将PHP的执行结果回传到HTML页面使用XMLHttpRequest对象可以做到首先创建这个对象varxmlHttp;if(window.XMLHttpRequest){//兼容Mozilla、Safari等浏览器对象xmlHttp=newXMLHttpRequest();}elseif(

2023-08-28 22:31:33
php怎么调用前端框架 使用layui前端框架,进行分页,php怎样传递数据
php怎么调用前端框架 使用layui前端框架,进行分页,php怎样传递数据

PHP新手该如何学习使用开发框架,有案例吗?关于PHP新手该如何学习使用开发框架,有案例吗,我有下面的观点。步骤1:PHP基础知识。如果你想在Web开发中建立一个未来,习得任何语言都需要一个坚实的语法基础,而HTML和CSS是基本技能。在PHP中:知识:容易掌握PHP的基本知识,了解PHP变量、变量类型、常量,如概念、PHP操作符理解和掌握PHP序列结构、结构条件、三种

2023-09-17 01:25:00
html调用php框架 html调用php
html调用php框架 html调用php

html中插入php的方法1、第一种是在HTML中加PHP。&lt;head&gt;&lt;metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/&gt;&lt;metahttp-equiv="Content-Language"content="zh-CN"/&gt;&lt;title&gt;H

2023-09-14 16:09:07