在编写面向对象(OOP) 程序时,通常是一个类新建一个 PHP 文件。 然而,在调用其他类的时候都需要去包含(include或require)这个类所在的php文件。
有没更简单的方法呢,答案当然是 有!!!
使用 spl_autoload_register() 函数注册任意数量的自动加载器。
目录结构为:
在编写面向对象(OOP) 程序时,通常是一个类新建一个 PHP 文件。 然而,在调用其他类的时候都需要去包含(include或require)这个类所在的php文件。
有没更简单的方法呢,答案当然是 有!!!
使用 spl_autoload_register() 函数注册任意数量的自动加载器。
目录结构为:
自从thinkphp5发布以来,可以说越来越优雅了,特别是tp5.1的发布,竟然支持.env配置文件啦!想必熟悉那个以优雅著称的某框架的同学一定不陌生。
thinkphp5.1支持的配置类型包括.ini、.xml、.json 、.yaml和 .php。
那么我们的.env就是采用ini方式的配置格式。用于在开发过程中模拟环境变量配置(该文件建议在服务器部署的时候忽略)。
熟悉laravel的同学都知道,laravel的数据迁移和数据填充,能够随着源代码的改变而同步记录同步数据库结构的变化,也就是对数据库的版本控制。
但是,有的项目开发之初,数据库结构的变化会比较频繁,每个都手动创建migrate文件的,工作量会比较大,或者老项目已有数据库,如果手动为所有的已存在的表去创建迁移文件的会非常耗时,还容易出错。
Elasticsearch(以下简称es)是一个实时的分布式搜索和分析引擎。
在搜索引擎方面,不仅仅有Elasticsearch,像另一篇提到的Algolia,还有sphinx、Solr等等,这里不做评价和比较,本篇主要介绍laravel中如何使用Elasticsearch。
你是否在检索千百万级数据时为性能和速度而担忧呢,即使优化了sql,创建了数据库索引,还是不尽如人意呢?
下面就主要介绍laravel如何集成Algolia
Algolia是法国初创公司为你提供毫秒级的数据库实时搜索服务,天下武功无坚不摧,唯快不破。记住哦,是毫秒级。
本文基于laravel5.5,其他版本大同小异。
经常我们做项目都团队协作开发,每个人都在自己本地的数据库,如果你曾经出现过让同事手动在数据库结构中添加字段的情况,数据库迁移可以解决你这个问题。
不仅如此,在线上部署的时候,也避免了手动导入数据库或手动修改数据结构的麻烦,数据迁移帮你方便的维护着数据结构。
数据填充,让我们测试的时候需要大量的假数据不再一条一条的去造数据,可以轻松的批量填充大量数据。
经常在朋友圈,QQ空间、微博上看到动态的发布时间、评论时间,都显示,昨天,前天,几天前,比起直接显示几月几日几分几秒要优雅的多。
于是自己的项目也想采用这种优雅直观的方式,网上找了各种计算相差几天的的例子,都是直接将时间戳相见除以86400,比如现在是17:08,动态更新的时间为前天22:00,这种方式计算的相差天数为1,而不是两天前。
实际情况应该是,昨天任何时间都算一天前,前天任意时间都算2天前,所以自己琢磨了一番,去动态更新时间与今天23:59:59相差的时间秒数与86400(24 x 3600)相除后,向下取整,这样就得到了相差的天数,比如昨天00:00~昨天23:59:59的任何时间与今天的23:59:59,都相差 86400~(86400 x 2) 天,也就是2天。
/**
* 获取已经过了多久
* PHP时间转换
* 刚刚、几分钟前、几小时前
* 今天昨天前天几天前
* @param string $targetTime 时间戳
* @return string
*/
function get_last_time($targetTime)
{
// 今天最大时间
$todayLast = strtotime(date('Y-m-d 23:59:59'));
$agoTimeTrue = time() - $targetTime;
$agoTime = $todayLast - $targetTime;
$agoDay = floor($agoTime / 86400);
if ($agoTimeTrue < 60) {
$result = '刚刚';
} elseif ($agoTimeTrue < 3600) {
$result = (ceil($agoTimeTrue / 60)) . '分钟前';
} elseif ($agoTimeTrue < 3600 * 12) {
$result = (ceil($agoTimeTrue / 3600)) . '小时前';
} elseif ($agoDay == 0) {
$result = '今天 ' . date('H:i', $targetTime);
} elseif ($agoDay == 1) {
$result = '昨天 ' . date('H:i', $targetTime);
} elseif ($agoDay == 2) {
$result = '前天 ' . date('H:i', $targetTime);
} elseif ($agoDay > 2 && $agoDay < 16) {
$result = $agoDay . '天前 ' . date('H:i', $targetTime);
} else {
$format = date('Y') != date('Y', $targetTime) ? "Y-m-d H:i" : "m-d H:i";
$result = date($format, $targetTime);
}
return $result;
}
经常我们在做项目的时候,会有按首字母排序的需求
比如:
熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录。
是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但如此优雅的laravel怎么就没有类似的批量更新的方法呢?
Google了一下,发现stackoverflow( https://stackoverflow.com/questions/26133977/laravel-bulk-update )上已经有人写好了,但是并不能防止sql注入。
我们看看官方怎么说:
http://php.net/manual/zh/configuration.file.per-user.php
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。
小白表示没看懂~
字符串截取支持中文html
/**
* 清除html标签,字符串截取
* 支持中文
* @author TechLee
*/
function substr_cn($str, $length = 0, $start = 0, $charset = "utf-8", $suffix = true)
{
$str = function_exists('clear_tags') ? clear_tags($str) : strip_tags($str);
if ($length > 0 && mb_strlen($str, $charset) <= $length) {
return $str;
}
$slice = $length > 0 ? mb_substr($str, $start, $length, $charset) : $str;
if ($suffix) {
return $slice . "…";
}
return $slice;
}
echo substr_cn('PHP是世界上最好的语言,是宇宙第一语言!', 10);
单纯用php原生函数 strip_tags 清除仍有残留和空格,下面的方法完美解决,将html转换为纯文本。
/**
* 清除html标签
*/
function clear_tags($str)
{
$str = strip_tags($str);
//首先去掉头尾空格
$str = trim($str);
$str = preg_replace("/(\s|\ \;| |\xc2\xa0)/", "", strip_tags($str));
//接着去掉两个空格以上的
$str = preg_replace('/\s(?=\s)/', '', $str);
//最后将非空格替换为一个空格
$str = preg_replace('/[\n\r\t]/', ' ', $str);
return $str;
}
// echo clear_tags('<p>Hello,World!!!</p>');
// 输出:
laravel 安装后是单模块应用,但通常情况下,我们的项目往往会有很多模块,如果按单模块去做,文件目录会异常庞大,不利于维护,耦合性太大。 那么下面就详细说一下利用最新laravel5.5如何进行分模块开发。
composer create-project --prefer-dist laravel/laravel ./
格式化输出json,php版本要求5.4或更高
/**
* 浏览器友好的变量输出json格式
* @param mixed $var 变量
* @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
* @return void|string
* @author TechLee
*/
function ddj($var, $echo = true)
{
header('content-type:application/json;charset=utf8');
$output = json_encode($var, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
if ($echo) {
echo ($output);
return;
} else {
return $output;
}
}PHP输出变量函数print_r和var_dump,没有格式化,易读性太差
下面结合thinkphp礼包dump函数改进的
/**
* 浏览器友好的变量输出
* @param mixed $var 变量
* @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
* @param string $label 标签 默认为空
* @return void|string
* @author TechLee
*/
function ddp($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
{
$label = (null === $label) ? '' : rtrim($label) . ':';
ob_start();
var_dump($var);
$output = ob_get_clean();
$output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
if (!extension_loaded('xdebug')) {
$output = htmlspecialchars($output, $flags);
专业企业官网建设,塑造企业形象,传递企业价值
系统软件开发,用心思考,用心设计,用心体验
打破技术瓶颈,让不堪重负的项目起死回生
构建全渠道一体化运营能力,实现全链路数字化
文案撰写、营销策划,专注品牌全案
一站式解决企业互联网营销痛点和难题
以技术的力量,改变互联网
联系我们