使用函数,extension_loaded()
$pdo = extension_loaded("pdo");
$sqlite = extension_loaded("sqlite3");
var_dump($pdo);
var_dump($sqlite);
使用函数,extension_loaded()
$pdo = extension_loaded("pdo");
$sqlite = extension_loaded("sqlite3");
var_dump($pdo);
var_dump($sqlite);
使用 count 语法:
db.集合.count({条件})
如果条件为空,则查询该集合的所有数据。
模糊匹配,使用正则表达式:
db.集合.find({字段:正则})
说白了,就是对字段用正则。正则是JS的正则,例如: /规则/
替换语法:
db.集合.update(查询BSON,修改后新BSON)
这个语法,会替换整条数据。
如果只替换某些字段,则使用 set 语法:
db.集合.update(查询BSON,{$set{修改后新BSON}})
删除数据:
db.集合.remove({BSON条件})
如果为空的bson则会导致所有的数据均被删除。
查询集合中的所有数据:
db.集合.find()
查询指定id(指定为1)的数据:
db.集合.find({"_id":"1"})
如果是默认的ObjectId,则带全称 find(“_id”: ObjectId(“fwefewfxv”)}
其他列名,也是如此 , find( { userid : “3” })
如果有多个值而只想查询第一个 ,使用 findOne 方法 或 find().limit(条数)
use 一个数据库后,就可以往数据库里插入数据
db.test.insert( { item : "card", qty : 15 })
插入格式: db.集合名称.insert() ,参数是 BSON数据
每次只能插入一条。
查询数据:
db.test.find()
使用 find 方法,可以查询一个集合中的数据,默认保留参数为空时,查询所有数据。
特别用于一些工具类的设计(例如单例模式)
已知数量有限的,都交给静态属性或静态方法管理(同一类实例共享)。
当然,静态方法也有一些不足之处,比如方法的代理。
而实例方法则方便很多,比如在构造方法中处理一些公用操作。
另外实例方法容易设计链式操作。
方法一:debug_backtrace
无论是有产生了bug,都可以调用本方法,返回所有调用的堆栈。返回值保存到一个变量中。
方法二:debug_print_backtrace
和前面差不多,但是会直接输出,通常来说不友好。
方法三:Exception类的getTraceAsString()成员函数返回一个调用堆栈。
此方法,过于麻烦,而且不灵活,因为返回的格式是固定的字符串,如果需要取出其中的组成部分,则需要手动拆分。
使用第一个方法,通常是最佳的。
在一些情况下,此方法非常巧妙,也就是假设有一个公用函数,a() ,那么可以在a方法中判断谁调用了自己(假设b和c同时调用a),针对b、或c进行一些特定的处理。
SpringAOP通过this调用方法时,不能触发切面方法。
因为this无法代理。
可以通过 AopContext.currentProxy() 调用当前类对象的代理对象,去执行想要执行的方法。
是否离开网站,你所做的更改可能未保存。
<script>
window.onbeforeunload = function(e) {
e = e || window.event;
// 兼容IE8和Firefox 4之前的版本
if (e) {
e.returnValue = false;
}
// Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
return false;
}
</script>
最快的方法:二分法
一个功能不能用了,先判断前端出问题还是后端出问题。
一个方法出问题了,先分成两半,并不是简单的分为两半,而是重点关注某些变量。
基于以上见解,首先要对代码合理的分层、分段。
一个方法不能太长,否则一旦出现问题不好排查。
代码行要符合高内聚、低耦合,相同功能的放在一块。
对于debug工具,要闭着眼睛也能熟练使用,没有工具效率会很低,虽然 print 也万能,但是这意味着你的速度大大降低,当前环境下各种优秀的开发调试工具,尽可能掌握并使用。
对于超长的方法,关注某个变量时,只要涉及该变量,则添加一个断点,那么几次快速跳跃断点,则可以很快定位问题所在。