wordpress媒体库搜索

当媒体库文件变多了,搜索显得非常重要。

wordpress媒体库的文件名不可以改变,也不可以归类。

但都有以下属性:

  • 标题
  • 说明文字
  • 描述

这些字段是可以随意编辑的,你可以在文件中编辑这些字段,以便从海量资源中快速查找你所需要的媒体文件。

navicat premium 16快捷键

打开查询窗口:ctrl+q

关闭查询窗口:ctrl+w

运行查询语句,如果已选中部分则运行该部分:ctrl+r

注释或取消注释:ctrl+/

打开命令行界面:F6

查找数据:ctrl+f

查询并替换:ctrl+h

仅显示活跃对象:F12

或查询数据库或表:用鼠标点击一下左侧导航栏,输入内容即可

到当前文档首行:Page Up

到当前文档末行:Page Down

到当前行首(行内):Home

到当前行尾(行内):End

保存查询:ctrl+s

另存查询:ctrl+shift+s

删除选中对象:Delete

放大与缩小:ctrl+滚轮

选中某一行:鼠标点击左侧的行号

选中多行:鼠标点击一行,按住拖动

跨行选中:按住ctrl,然后用鼠标选中内容

php根据出生时间计算年龄

先分别取得出生年、月、日

再取得当前年、月、日。

年份相减,再比较月、日。

/**
 * 根据出生日期计算年龄
 * @param string $birth 要计算的出生日期(格式:1970-1-1)
 * @return int
 */
function getBirthAge($birth){
    if ($birth) {
        list($by, $bm, $bd) = explode('-', $birth);
        $cm = date('n');
        $cd = date('j');
        $age = date('Y') - $by - 1;
        if ($cm > $bm || $cm == $bm && $cd > $bd) $age++;
        return $age;
    }
}

php判断是否为手机端

检测user-agent

/**
 * 判断是否为手机端
 * @return bool
 */
function isMobile(){
    $useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match("/iphone|ios|android|mini|mobile|mobi|Nokia|Symbian|iPod|iPad|Windows\s+Phone|MQQBrowser|wp7|wp8|UCBrowser7|UCWEB|360\s+Aphone\s+Browser|AppleWebKit/", $useragent)) {
        return true;
    } else {
        return false;
    }
}

php动态创建类和调用方法

php在new 一个类时的类名,可以使用变量名

比如支付设计,只需要传入一个paytype字符串,后台可以动态include文件,然后动态new对象

$pay = new $paycode();

new 后面的$paycode是一个变量,

然后通过调用核心方法实现。比如:

echo $pay->get_code($order, $paymentArr,$returnjson,$param);

效果和java的反射是一样的,但更简单。

数据库union和union all的区别

数据库union和union all语句,都需要字段长度相同且字段名相同(通过字段别名技巧实现),可以把几个不相关的表数据一次查出来。

一般来说union会丢弃重复数据且排序,而union all会包含重复数据(原理上不会丢失,但某些情况sql不对也会丢弃)且不排序。

在使用时建议检验数据结果,如果数据不对,可以通过多个sql查询,并通过编程语言合并。

尽量减少程序中的if else嵌套

如果使用了很多层if-else嵌套,那么该代码交给其他人员就很难维护。

因为屏幕大小有限,多层if嵌套后,如果每个if里代码很长,来回滚动查看很费劲。

尽量通过封装,或通过分层或其他编码技巧,把代码写为顺序语句,而不要写为分支语句。

phpstorm debug 动态set value

在测试支付时,由于多种支付方式付款特别麻烦,于是尝试在debug中修改支付方式的参数。

在恰当的位置,使用debug打断点,然后在控制台下Debugger框,有一个Variables,在这里(在代码中好像无效,只能在这里)选中set value,并设置新的值,注意数据类型,它可能会自动修改数据类型。例如原本的“余额支付”,设置新值为“支付宝”时,要把双引号去掉,如果加了双引号则报错,这可能和版本有关系,这里使用的是2021.1.3版本。

php序列化和反序列化

序列化是把内存中的对象转换为字符串(流)的形式,方便永久存储或网络传输。

一般的序列化和反序列化是指serialize($var)函数,和unserialize($var)函数。

序列化可以对任意对象(包括数据)使用,只是该形式比较特殊,只有php能使用。

使用json_encode和json_decode同样可以序列化,只是对象一般使用serialize,比如:

serialize序列化之后,反序列化的数据,可以重新调用成员方法,但是json_decode不行。

__sleep和__wakeUp魔术方法

当一个对象被串行化,PHP会调用__sleep方法(如果存在的话,并且进行操作,比如对变量赋值). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性.
      在程序执行前,serialize() 函数会首先检查是否存在一个魔术方法 __sleep.如果存在,__sleep()方法会先被调用, 然后才执行串行化(序列化)操作。这个功能可以用于清理对象,并返回一个包含对象中所有变量名称的数组(必须返回。与之相反,unserialize()会检查是否存在一个__wakeup方法。如果存在,则会先调用 __wakeup方法,例如可以用于数据库的重新连接