当媒体库文件变多了,搜索显得非常重要。
wordpress媒体库的文件名不可以改变,也不可以归类。
但都有以下属性:
- 标题
- 说明文字
- 描述
这些字段是可以随意编辑的,你可以在文件中编辑这些字段,以便从海量资源中快速查找你所需要的媒体文件。
当媒体库文件变多了,搜索显得非常重要。
wordpress媒体库的文件名不可以改变,也不可以归类。
但都有以下属性:
这些字段是可以随意编辑的,你可以在文件中编辑这些字段,以便从海量资源中快速查找你所需要的媒体文件。
打开查询窗口: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,然后用鼠标选中内容
先分别取得出生年、月、日
再取得当前年、月、日。
年份相减,再比较月、日。
/** * 根据出生日期计算年龄 * @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; } }
检测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在new 一个类时的类名,可以使用变量名
比如支付设计,只需要传入一个paytype字符串,后台可以动态include文件,然后动态new对象
$pay = new $paycode();
new 后面的$paycode是一个变量,
然后通过调用核心方法实现。比如:
echo $pay->get_code($order, $paymentArr,$returnjson,$param);
效果和java的反射是一样的,但更简单。
在php程序中可以根据用户是否登录,或是否为管理员,或者在调试中,才显示错误日志。
例如:
ini_set('display_errors', $cfg_siteDebug ? 'On' : 'Off'); //Debug设置
这里的display_errors如果设置为Off则关闭。
数据库union和union all语句,都需要字段长度相同且字段名相同(通过字段别名技巧实现),可以把几个不相关的表数据一次查出来。
一般来说union会丢弃重复数据且排序,而union all会包含重复数据(原理上不会丢失,但某些情况sql不对也会丢弃)且不排序。
在使用时建议检验数据结果,如果数据不对,可以通过多个sql查询,并通过编程语言合并。
如果使用了很多层if-else嵌套,那么该代码交给其他人员就很难维护。
因为屏幕大小有限,多层if嵌套后,如果每个if里代码很长,来回滚动查看很费劲。
尽量通过封装,或通过分层或其他编码技巧,把代码写为顺序语句,而不要写为分支语句。
在测试支付时,由于多种支付方式付款特别麻烦,于是尝试在debug中修改支付方式的参数。
在恰当的位置,使用debug打断点,然后在控制台下Debugger框,有一个Variables,在这里(在代码中好像无效,只能在这里)选中set value,并设置新的值,注意数据类型,它可能会自动修改数据类型。例如原本的“余额支付”,设置新值为“支付宝”时,要把双引号去掉,如果加了双引号则报错,这可能和版本有关系,这里使用的是2021.1.3版本。
序列化是把内存中的对象转换为字符串(流)的形式,方便永久存储或网络传输。
一般的序列化和反序列化是指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方法,例如可以用于数据库的重新连接