依赖注入允许向类中的方法传递对象
其实依赖注入就是类型约束,可以参考官网文档,被写在方法参数中的类会被自动实例化,这就是依赖注入
http://php.net/manual/zh/language.oop5.typehinting.php
Continue reading PHP 依赖注入学习学习日志 LIUGUOFENG
其实依赖注入就是类型约束,可以参考官网文档,被写在方法参数中的类会被自动实例化,这就是依赖注入
http://php.net/manual/zh/language.oop5.typehinting.php
Continue reading PHP 依赖注入学习MVC 即 Model(数据模型层,对数据的加工处理)、View(视图层,和用户交互的界面)、Controller (业务逻辑处理)
相关框架:ThinkPHP、Yii2、CI、Yaf、Phalcon
单一入口的工作原理:用一个处理程序文件处理所有的HTTP请求,根据请求时的参数的不同区分不同模块和操作的请求
优势:可以进行统一的安全性检;集中处理程序
劣势:URL不美观(URL重写);处理效率会稍低
MVC:ThinkPHP、Yii2、CI、Yaf、Phalcon
单一入口的工作原理:用一个处理程序文件处理所有的HTTP请求,根据请求时的参数的不同区分不同模块和操作的请求
优势:可以进行统一的安全性检;集中处理程序
劣势:URL不美观(URL重写);处理效率会稍低
模板引擎:模板引擎就是庞大的完善的正则表达式替换库
PHP是一种HTML内嵌式的在服务端执行的脚本语言,但是PHP有很多可以使PHP代码和HTML代码分开的模板引擎,例如:Smarty、Twig、Haml、Liquid等
php 传递数组到 js,使用 json 格式交互
var list = JSON.parse('<?php echo urlencode(json_encode($list));?>');
对于 php 的 json 与 js 的 json 格式不同(php 的数组 json 使用 方括号 [ ], js 的 json 全部使用 { } 、php 的 json_encode 会对 斜线进行转义,造成 json 在 js 中 被截断),使用下列方式处理
var list = eval(decodeURIComponent('<?php echo urlencode(json_encode($list));?>'));
<?php
$arr = [
['id'=>1,'main'=>222],
['id'=>2,'main'=>333],
['id'=>2,'main'=>444],
['id'=>1,'main'=>111],
['id'=>3,'main'=>122],
];
$a = array_column($arr,'main');
$b = array_column($arr,'id');
echo "<pre>";
var_dump($a,$b);
var_dump(array_multisort($a,SORT_DESC,$b));
var_dump($a,$b);
?>
array_multisort() 先把第一个数组按照键值的大小排序,然后其它数组都按照第一个数组的调整策略进行调整。
优化一下则为
<?php
$arr = [
['id'=>1,'main'=>222],
['id'=>2,'main'=>333],
['id'=>2,'main'=>444],
['id'=>1,'main'=>111],
['id'=>3,'main'=>122],
];
echo "<pre>";
array_multisort(array_column($arr,'main'),SORT_DESC,$arr);
var_dump($arr);
?>
<?php
echo "<pre>";
$start = microtime(true);
$end = microtime(true);
$rand = [];
$i = 0;
do{
$theRand = mt_rand(0,99999);
if(in_array($theRand,$rand)){
$i=$i+1;
}
$rand[] = $theRand;
$end = microtime(true);
}while(($end-$start)<1);
echo $i;
echo "<br>";
echo count($rand);
?>
多次测试后,
当随机数为 0 - 99999 时,每秒约能生成 25000 个随机数,重复的约为 3000
当随机数为 0 - 999999 时,每秒约能生成 25000 个随机数,重复的约为 300
机数为 0 - 9999999 时,每秒约能生成 25000 个随机数,重复的约为 30
一秒钟内生成两个随机数撞车的概率还是蛮大的
起因是做活动,订单号貌似重复了,高峰期一分钟八单
两个日期之间的全部日期
//两个日期之间的日期数组形式
function prDates($start,$end){
$dt_start = strtotime($start);
$dt_end = strtotime($end);
$date = array();
while ($dt_start<=$dt_end){
$date[] = date('Y-m-d',$dt_start);
$dt_start = strtotime('+1 day',$dt_start);
}
return $date;
}
位数补零
$number=sprintf ( "%02d",$number);
数组的指定key后面插入数据
function array_push_after_key($array, $data=null, $key=false){
$data = (array)$data;
$offset = ($key===false)?false:array_search($key, array_keys($array));
$offset = ($offset)?$offset:false;
if($offset){
return array_merge(
array_slice($array, 0, $offset+1),
$data,
array_slice($array, $offset+1)
);
}else{ //找不到key,就直接加到末尾
return array_merge($array, $data);
}
}
PHP 正则匹配替换 HTML 的 IMG 标签 SRC 属性,添加图片域名
private function preg_match($img){
$newImg = preg_replace('/(<img.+?src=")(.*?)/','$1'.base_url().'$2', $img);
return $newImg;
}
/**
* @param $img 图片地址
* @param string $width 宽
* @param string $height 高
* @param string $ratio 保持原比例
* @return string 生成的地址
*/
public function resize_fuc($img, $width, $height, $ratio)
{
$info = get_img_info($img);
$name = pathinfo($img)['filename'];
$dirname = pathinfo($img)['dirname'];
$ext = pathinfo($img)['extension'];
$im = NULL;
$type = strtolower($info['type']);
if (!in_array($type, ['jpg', 'jpeg', 'gif', 'png'])) {
return FALSE;
}
$type = ($type == 'jpg' ? 'jpeg' : $type);
$scale = $info['width'] / $info['height'];
if ($ratio == TRUE) {
$forScale = $width / $height;
$x = 0;
$y = 0;
if ($scale >= $forScale) {
$width = (int)($height * $scale);
$rate = $info['height']/$height;
} else {
$height = (int)($width / $scale);
$rate = $info['width']/$width;
}
} else {
$forScale = $width / $height;
if ($scale >= $forScale) {
$x = ($info['width'] - $info['height'] * $forScale) / 2;
$y = 0;
$rate = $info['height'] / $height;
} else {
$x = 0;
$y = ($info['height'] - $info['width'] / $forScale) / 2;
$rate = $info['width'] / $width;
}
}
if($width>$info['width'] || $height>$info['height']){
return;
}
$imageCreateFun = 'imagecreatefrom' . $type;
$im = $imageCreateFun($img);
$thumb = $dirname . '/' . $name . '_tmp' . "." . $ext;
$imageFun = 'image' . $type;
$imageFun($im, $thumb);
$thumbNew = imagecreatetruecolor($width, $height);
imagecopyresampled(
$thumbNew, $im,
0, 0, intval($x), intval($y),
intval($width * 1), intval($height * 1), intval($width * $rate), intval($height * $rate)
);
$imageFun($thumbNew, $thumb);
imagedestroy($im);
imagedestroy($thumbNew);
rename($thumb,$img);
return $img;
}
function get_img_info($img) {
if(!is_file($img) || !in_array(strtolower(pathinfo($img)['extension']),['jpg','jpeg','bmp','gif','png'])){
return false;
}
$img_info = getimagesize($img);
if ($img_info !== false) {
$img_type = strtolower(substr(image_type_to_extension($img_info[2]), 1));
$info = array("width" => $img_info[0], "height" => $img_info[1], "type" => $img_type, "mime" => $img_info['mime'], );
return $info;
} else {
return false;
}
}
json_encode 所有字符串数据的编码必须是 UTF-8,否则返回 false
如果不是 utf-8
可以utf8_encode()
处理下
数组中存在哪些字符会导致数组json_encode返回false
https://segmentfault.com/q/1010000008908162