Thinkphp实例化对象的四种方法比较
在Thinkphp有四种不同的方法实例化对象,new方法、D方法、M方法、空模型方法,比较常用的是D方法和M方法。本文大都是官方手册东西,自己稍微做了下总结。
New方法
new方法是最好理解的一种方法,就是普通的实例化类,参数可选,依次是表名、表前缀、数据库连接信息,大多数情况下不需要传参。
new \Home\Model\NewModel('new','think_','DB_CONFIG');
D方法
D方法Thingkphp(下面简称TP)系统提供的一个实例化类的快捷方法,通过D方法我们可以快速的实例化一个类并使用。
//实例化模型
$User = D('User');
// 相当于
$User = new \Home\Model\UserModel();
// 执行具体的数据操作
$User->select();
当 \Home\Model\UserModel 类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\UserModel 类,如果还不存在的话则会实例化系统的\Think\Model基类,这是一点值得注意的地方。
M方法
D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。
// 使用M方法实例化
$User = M('User');
// 和下面用法等效
$User = new \Think\Model('User');
// 执行其他的数据操作$User->select();
如果你的模型类有自己的业务逻辑,M方法是无法支持的,就算是你已经定义了具体的模型类,M方法实例化的时候是会直接忽略。
实例化空模型类
如果你仅仅是使用原生SQL查询的话,不需要使用额外的模型类,实例化一个空模型类即可进行操作了
//实例化空模型
$Model = new Model();
//或者使用M快捷方法是等效的
$Model = M();
//进行原生的SQL查询
$Model->query('SELECT * FROM think_user WHERE status = 1');
总结
我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法,M方法会直接忽略自定义的具体模型类。
PHP求异形多维数组的平均值的方法小编能想到的就是遍历数组了,那么还有其它的办法可以实现吗,下面我们一起来看看。在php中,求一个多维异形多维数组常见的方法就是递归,如同以下代码
$count=0;$sum=0;
function avgarr($arr)
{
global $sum,$count; //全局变量
foreach ($arr as $value) { //循环遍历数组
if (is_array($value)) {
avgarr($value); //递归
}
elseif (is_int($value)) {
$sum+=$value;
$count++;
}
}
return $sum/$count; //返回平均值
}
开始的时候写完以上代码,测试了一个数组,结果OK。窃喜,以为大功告成。可是仔细观察一下呢?这个函数再求出一个数组的平均值后,还可以继续使用吗?不可以,因为定义的全局变量已经改变,不能自动重置,用这个函数求完一个数组后就废掉了,不能继续使用了。除非每次手动给$sum、$count归零。那这样岂不是太费事了? 还有这种方法,看代码:
function avgarr2($arr){
$count=0;$sum=0;
echo avgarr($arr);
}
将上面的函数再放到另一个函数内,利用这个函数每次重置$sum和$count。这样一来,函数就具有通用性了。
Checkbox的值获得与普通的input获得方法是不一样了,我们下面来看一篇PHP处理Checkbox多选框表单元素的例子,希望能够让各位知道如何使用php来接受checkbox的值哦。最近做Form表单提交的时候,复选框Checkbox提交的数据不知道怎么处理,Checkbox允许多个选项,我们不可能每个选项都自定义Name属性,然后后台一一获取,这样也不方便扩展。
后来查了些资料后发现,关键点在于Checkbox的Name属性上。需要给checkbox一个统一的数组形式的Name,例如mycheckbox[],对的就是PHP中定义数组的一种方式。然后在后台获取这个数据,例如POST表单的$_POST[‘mycheckbox’],此时这个数据已经是一个数组了。下面是一个简单的例子。
Form表单代码
<input name="hobby[]" type="checkbox" value="html" />html
<input name="hobby[]" type="checkbox" value="css" />css
PHP表单处理
var_dump($_POST);
if (isset($_POST["hobby"])) {
foreach ($_POST["hobby"] as $hobby) {
echo "语言:{$hobby}<br />";
}
}
其实任何一组相同数据的文本框,都可以使用这种方式批量获取值,而不仅限于CheckBox。
PHP获取任意数组的长度不能使用php自带的count函数来实现了我们需要进行一些自定义开发了,下面一起来看看如何实现检测任意数组长度吧,具体的操作如下所示。PHP经常处理未知深度的数组,这种情况一般用递归可以处理,但是对于数组深度,还是知道的好。
获取数组长度:
代码如下 | 复制代码 |
/** |
测试:
代码如下 | 复制代码 |
$arr = array( var_dump($arr_len); //result int(5) |
相关文章
- 这篇文章主要介绍了java8如何用Stream查List对象某属性是否有重复的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-11
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
如何在Spring WebFlux的任何地方获取Request对象
这篇文章主要介绍了如何在Spring WebFlux的任何地方获取Request对象,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下...2021-01-26牛叉的Jquery――Jquery与DOM对象的互相转换及DOM的三种操作
只有jQuery对象才能调用jQuery类库的各种函数,同样有些dom对象的属性和方法在jQuery上也是无法调用的,不过基本上jQuery类库提供的函数包含了所有的dom操作。这就需要我们知道如何将jQuery对象和DOM的相互转换的方法。1...2015-10-30- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一打印出来,具体代码如下: fu...2015-10-21
- 本文给大家介绍如何替换json对象中的key,通过实例代码给大家介绍key的替换方法,代码也很简单,需要的朋友参考下吧...2021-06-02
- 这篇文章主要介绍了javascript self对象使用详解的相关资料,需要的朋友可以参考下...2016-10-20
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31ActiveX部件不能创建对象:dm.dmsoft代码:800A01AD
vbs调用插件报:ActiveX部件不能创建对象,代码:800A01AD,一般是因为病毒导致dll文件丢失或者64系统问题导致,需要的朋友可以参考下...2020-06-30- 这篇文章主要介绍了JS实现简单面向对象的颜色选择器,以完整实例形式分析了JavaScript基于面向对象实现颜色选择器的具体步骤与实现技巧,需要的朋友可以参考下...2016-04-23
解决SpringCloud Feign传对象参数调用失败的问题
这篇文章主要介绍了解决SpringCloud Feign传对象参数调用失败的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-24- 这篇文章主要介绍了Javascript对象,特别为大家分享了对象题目的一个坑,提供了解题思路,感兴趣的小伙伴们可以参考一下...2015-12-24
- 这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
- 这篇文章主要介绍了HTML5 FileReader对象的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 在web页面中,图片居左,内容居右排列,是非常常见的效果,它也就是媒体对象,它是一种抽象的样式,可以用来构建不同类型的组件。本文给大家介绍Bootstrap媒体对象的实现,感兴趣的朋友一起学习吧...2016-05-04
- 这篇文章主要为大家介绍了JavaScript事件对象,了解JavaScript事件...2016-01-26
- 这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
- 这篇文章主要介绍了vue - props 声明数组和对象操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30
- 下面小编就为大家带来一篇protobuf对象二进制序列化存储(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25