把博客的PHP版本升级到PHP7了,实测Typecho是完美支持PHP7的,新安装博客的不需要做任何修改,如果是数据迁移过来的,检查网站根目录下config.inc.php
文件中$db = new Typecho_Db('Mysql', 'typecho_');
修改为$db = new Typecho_Db('Pdo_Mysql', 'typecho_');
。
本文要谈论的是另外一个问题,更换PHP7后发现Typecho的自定义字段出了点问题,PHO5.X下一切正常,仔细一检查发现问题不是出在Typecho,是PHP7中isset出现了问题,Typecho官方文档中使用insset判断是否设置自定义字段,类似于:
if(isset($this->fields->fieldName)){
echo '字段存在,值为:'.$this->fields->fieldName;
}else{
echo '字段不存在';
}
但是在PHP7下,无论是否设置自定义字段,返回值均是false。
于是我开始搜PHP7下,isset的用法,搜到了这篇文章:升级 PHP7 后 isset 不太对了,这篇文章详细说明了出现这个问题的原因,但是无奈于我是代码小白,通读了好几遍似乎对为什么出现这个问题有所感悟,但是还是不知道PHP7下,insset如何使用。
继续找参考资料,就遇到了这篇文章:PHP 7's null coalesce operator usage with Objects and Arrays,简单明了的列举了php7 isset的写法,具体可以看原文,也可以看我下面的例子,还是以Typecho的自定义字段为例,上面的代码在PHP7下可以这样写:
<?php
$field = $this->fields->format;
echo $field ?? '字段不存在';
?>
当然为了增加代码可读性,也可以这样写
<?php
$field = $this->fields->format;
echo isset($field) ? $field : '字段不存在';
?>
好了具体更复杂的用法大家可以在原文学习,毕竟人家是专业的。