【php杂谈】php如何解决函数引用传参不能为空,使用函数回调和global关键词
php 函数调用有一个引用传参的功能,所谓引用的意思就是你传过来的实参到函数里面,在这个函数里面通过代码改变了这个参数的值,然后这个外部实参的值也会跟着变(变量的内存地址是同一个),这就叫引用传参!但是呢,函数引用参数有一个缺点,就是不能默认为空,也就是调用函数的时候这个引用参数不能省略!那么如何解决这个方法,我们就可以用到回调函数!!经初步测试,php5.6及以上是支持的,其他版本未测试!下面直接上代码
php 函数调用有一个引用传参的功能,所谓引用的意思就是你传过来的实参到函数里面,在这个函数里面通过代码改变了这个参数的值,然后这个外部实参的值也会跟着变(变量的内存地址是同一个),这就叫引用传参!但是呢,函数引用参数有一个缺点,就是不能默认为空,也就是调用函数的时候这个引用参数不能省略!那么如何解决这个方法,我们就可以用到回调函数!!经初步测试,php5.6及以上是支持的,其他版本未测试!下面直接上代码
今天在写一个功能的时候,用到数据模型时出现如下报错该意思通俗讲就是访问数组中不存在的字段!
在实现具体功能的php代码之前,我们需要先了解一个组件库,ffmpeg-php首先php本身是无法获取视频和音频文件的信息,需要通过这个ffmpeg组件库调用php底层的程序来获取下面开始安装ffmpeg-php到thinkphp项目中!
通过用户反馈服务器在使用时,如果网站过多或者并发过大,php自带的session可能会失效于是就有个了这个数据库版本,模拟session功能,今天把主要逻辑代码分享出来注意:代码中的DB类如果和你的程序不兼容需要自己改一下哦// +----------------------------------------------------------------------// | Nmae:Session数据库版 根据cookie生成设备标识,可替换本地服务器session过多出错问题// +----------------------------------------------------------------------// | Author: 沉梦执于梦 857285711 <blog.chenmyun.com>// +----------------------------------------------------------------------// | Date: 2020/10/16// +----------------------------------------------------------------------class Session{ /** * 设置Session * @param [type] $name [description] * @param [type] $value [description] * @param [type] $expire [description] */ public static function set($name, $value, $expire = null) { global $DB; $userid = self::getUserId(); if ($expire === null || $expire < time()) { $expire = time() + 3600; } try { $row = $DB->get_row("SELECT * FROM `auth_session` WHERE u= ? and k= ? limit 1", [$userid, $name]); if ($row != false && isset($row['id'])) { $data = [$value, $expire, $row['id']]; return $DB->query("UPDATE `auth_session` SET v= ?, e= ? WHERE `id`= ?", $data); } else { $sql = "INSERT INTO `auth_session` (`u`,`k`,`v`,`e`) VALUES (?, ?, ?, ?)"; $data = [$userid, $name, $value, $expire]; if ($DB->query($sql, $data)) { return true; } throw new \PDOException($DB->error()); } } catch (\PDOException $e) { die('数据库错误:' . $e->getMessage()); } catch (\Exception $e) { die('系统错误:' . $e->getMessage()); } } /** * 获取session * @param string $name session名称 * @return string */ public static function get($name = 'userid') { global $DB; $userid = self::getUserId(); $data = [$userid, $name]; $row = $DB->get_row("SELECT * FROM `auth_session` WHERE u= ? and k= ? limit 1", $data); if (is_array($row) && $row['e'] > time()) { return $row['v']; } return ''; } /** * 获取设备唯一标识 * @param boolean $update 是否刷新 */ public static function getUserId($update = false) { $userid = isset($_COOKIE['uid']) ? $_COOKIE['uid'] : null; if ($update || empty($userid) || !isset($_COOKIE['uid'])) { $userid = md5(uniqid(mt_rand(), 1) . time() . rand(1111, 9999) . x_real_ip()); setcookie('uid', $userid, time() + 86400 * 30, '/', null); } return $userid; } /** * 生成随机MD5字符串 * @return string */ public static function getRandString() { return md5(uniqid(mt_rand(), 1) . time() . rand(11111, 99999) . x_real_ip()); } /** * 清空当前设备cookie * @param [type] $name [description] * @return [type] [description] */ public static function checkDel($name) { $num = 0; if (is_array($_COOKIE)) { foreach ($_COOKIE as $key => $value) { if ($key == $name) { $num++; } } if ($num >= 2) { unset($_COOKIE[$name]); } } }}
php现在比较成熟的框架有好几个,但是都是用的严格模式,这会导致在获取不存在的数组成员时就会报错!!诸如现在thinkphp的就会,为了解决这个问题,封装了几个函数if (!function_exists('array_get')) { /** * 快捷获取数组指定键的成员 可避免php框架的严格模式下报错 * 如 $arr = ['name'=>'测试','data'=> ['a'=>'555','b'=>'6565']]; 可以 array_get('data.b', $arr); * @param string|number $key key 支持无限级获取 * @param array $array 数组 * @param string $default 默认值 */ function array_get($key = null, $array = [], $default = null) { if (is_array($array)) { if (is_null($key)) { $key = 0; } if ($pos = strpos($key, '.')) { $key2 = mb_substr($key, 0, $pos); $array2 = array_has($key2, $array) ? $array[$key2] : $default; if (is_array($array2)) { return array_get(mb_substr($key, $pos + 1), $array2); } return $default; } return array_has($key, $array) ? $array[$key] : $default; } return $default; }}if (!function_exists('array_has')) { /** * 快捷检测数组指定键是否存在 * @param string $key key * @return [type] 数组 */ function array_has($key = null, $array = []) { if (is_array($array) && !is_null($key)) { return array_key_exists($key, $array); } return fasle; }}
sublimetext3是一款很多人都在使用的常用前后端编程语言编辑器它很多特性都很不错,扩展插件丰富,同时性能也很棒,不容易出现卡顿现象,这也是很多开发者喜欢它的原因但是新安装的sublimetext3有一个无语的问题,就是新打开的文件或项目不会自动换行,这会影响到开发效率今天沉梦给大家带来如何始终自动换行!!1、打开sublimetext3,点击顶部菜单的【preferences】2、点击第二个选项,中文版是【设置】
很多刚接触mysql的朋友在用mysql创建字段类型时都会用到给字段设置一个default默认值!但是这其中有一个特殊的数据类型是不能有默认值的,它会引起mysql错误导致你预期的sql语句不会被成功执行!它就是text类型下面这句创建字段语句是错误的×ALTER TABLE `tablename` ADD `tips` text NULL DEFAULT '默认提示';而下面这句才是正确的√AL
全部都是静态方法,不需要实例化即可调用 代码如下:<?php!defined('DS') && define('DS', DIRECTORY_SEPARATOR);/** * Name 文件下载、解压、复制、移动操作综合类 * Author 沉梦执于梦
以下是平时经常会用到的处理文件需求,记录下来方便查阅,长期更新中== // 定义目录分隔符 !defined('DS') && define('DS', DIRECTORY_SEPARATOR); /**&nb