PHP知识点

lavaral toArray

optional()->toArray();

获取进程id

ps -elf|grep docker|grep -v grep|awk '{print $4}'
ps aux | grep docker | awk   '{print $2}'

时间 日期

//获取当前月份共有多少天
$weeks_days = date("d", strtotime(date("Y-m-01", strtotime($nowdate)) . " +1 month  -1 day"));

PHPexcel 隐藏列

$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setVisible(false);

简单方式输出需要转义的字符

$a=<<<张继康
  带有任何字符的任何文本
张继康;

CSS苹果5修改根文字大小

    @media screen and (max-width: 320px) {
        :root {
            font-size: 16px;
        }
    }

网页报错整理

413 nginx.ini 没有client_max_body_size配置

三目运算符

$a??'yes':'no'

    //判断$a是否存在并且有值

if...else ... 判断的其他写法

$age = '5';

if ($age < 15):
    echo '还没有15岁的小孩子';
elseif ($age < 30):
    echo '还没有到30岁的中年人';
else:
    echo '大人';
endif;

文件引入的方式 include ,require区别


include 当文件不存在时,只出现警告,不会终止程序,文件存在时,每次被应用都会被引用
require 当文件不存在时,会出现致命错误,并且终止程序.

文件引入的方式 include_once ,require_once区别

include_once 当文件不存在时,只出现警告,不会终止程序,文件存在时只会引用第一次.
require_once 当文件不存在时,会出现致命错误,并且终止程序,当文件存在时只会被应用一次

命名空间释义

a.php  有个make方法,输出a
B.php  文件有个make方法,输出B

C文件同时引用AB文件会出现问题,那么 给A和B 写命名空间,分别是:
namespace a;
namespace b;

然后在C里  调用a/make 和 b/make 就不会冲突

传值 传址

function show($va){

    $va ++ ;
    echo $va
}


$va = 1;
echo show($va);



当形参没有&号时,函数体内部和外部的$是不同的,形参有&符时候,内外用的是同一个变量.

点语法

function sum(...$a){

    return  array_sum($a);

}

echo sum(1,2,2,3,3,4,4,5);


不确定值有多少个的时候就可以用点语法.

字符串用*号代替

function mobile($tel,$num=4,$fix = '*'){
    return substr($tel,0,-1*$num) .str_repeat($fix,$num);
}
echo mobile('11122222121',3);


例子是手机号几位数用*代替.

严格模式,形参格式限制

declare(strict_types=1);
//function show(int $num)
//{
//    return $num;
//}
//
//var_dump(show('2'));
function sum(int ...$nums)
{
    return array_sum($nums);
}

try {
    echo sum(1, 2, 3, '5');
} catch (\Throwable $th) {
    echo $th->getMessage();
}

返回值格式限制

function sum(): ?string  // 问号的意思就是可空或字符串
{
    return null;//如果是空要明确为null     
}

try{
    echo sum();
}catch (\Throwable $th){
    echo $th->getMessage();
}

static

static   第一次调用函数的时候执行,接下来的调用不再次执行.
    function sum(int ...$nums): int
{
    static $count = 0;
    return $count += array_sum($nums);
}

echo sum(1, 2, 3);
echo '<br/>';
echo sum(1, 2, 3);

截取文件名后缀

$file = 'Ricker.jpg';
$ext = trim(strrchr($file, '.'), '.').strtolower($ext);

//先获取.之后的文本(.jpg),然后去掉.号,然后转成小写.


//第二个方式如下
$ext = strtolower(substr(strrchr($file,'.'),1));

判断函数是否存在

if (function_exists($action)) {
    echo $action($file);
} else {
    echo '系统不能处理此类型';
}

递归函数

//5 1*2*3*4*5
function recursive($num){
    //3*(2)
    if($num==1){
        return $num;
    }
    return $num*recursive($num-1);
}
echo recursive(5);

索引数组、关联数组

//索引数组
$arr = [1, 2, 3,];
print_r($arr[1]);


//关联数组
$article = [
    'title'=>'Visual Studio Code',
    'created_at'=>"2020-2-22"
];

echo $article['title'];

list函数

// $arr = ['张继康','Ricker'];
// list($a,$b)  = $arr;
// echo $b;


//$user = ['name'=>'张继康','age'=>33];
//list('name'=>$name,'age'=>$ag) = $user;
//echo $ag;

// $arr = ['张继康','Ricker','yuhuangdadi.xyz'];
// list(,,$web) = $arr;
// echo $web;

foreach

$users = [
    ['name' => '张继康大叔', 'age' => '16',],
    ['name' => '小明', 'age' => '19',],
    ['name' => '张三', 'age' => '23',],
    ['name' => '李四', 'age' => '16',],
];

//想修改数组的某个值,比如这个数组的年龄字段都增加50岁,有以下2个方式

foreach ($users as $key => $user) {
    $users[$key]['age'] += 50; //这是第一种方式

 //foreach ($users as $key => &$user) { //这是第二种方式 

    echo $key.'='.$user['name'].'<br/>';
}

数组操作函数

array_pop  删除最后一个元素

<?php
$a=array("red","green","blue");
array_pop($a);
print_r($a);
?>



array_push  向数组压入一个元素

<?php
$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);
?>


array_shift   删除数组中的第一个元素(red),并返回被删除元素的值:
<?php
$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_shift($a);
print_r ($a);
?>


把元素 "blue" 插队到数组的第一个元素之前:

<?php
$a=array("a"=>"red","b"=>"green");
array_unshift($a,"blue");
print_r($a);
?>

判断数组内是否含有某个值

<?php
$allowImageType = ['jpeg'=>2000000,'jpg'=>2000000,'png'=>2000000];
$file = 'Ricker.png';
$ext = strtolower(substr(strrchr($file,'.'),1));
if(!array_key_exists($ext,$allowImageType)){
    echo 'wrong';
}else{
    echo 'success';
}

数组操作

<?php
//array_filter
$users = [
['name' => '张继康大叔', 'age' => '16',],
['name' => '小明', 'age' => '19',],
['name' => '张三', 'age' => '23',],
['name' => '李四', 'age' => '16',],
];
$filterUsers = array_filter($users,function($user){
return $user['age']>20;
});
print_r($filterUsers);

数组操作

<?php
//一个数组,只要name字段,或者统一增加一个sex字段

$users = [
['name' => '张继康大叔', 'age' => '16',],
['name' => '小明', 'age' => '19',],
['name' => '张三', 'age' => '23',],
['name' => '李四', 'age' => '16',],
];
$names = array_map(function($user){
return $user['name'];
},$users);
print_r($names);
//$mapUsers = array_map(function($user){
//    unset($user['age']);
//    $user['class'] = 'yuhuangdadi.xyz';
//    return $user;
//},$users);
//print_r($mapUsers);

数组操作

<?php
// 数组内每一个元素执行一个回调函数,比如杰鸿的每个模型的D函数,用来处理列表页的数据


$users = [
    ['name' => '张继康大叔', 'age' => '16',],
    ['name' => '小明', 'age' => '19',],
    ['name' => '张三', 'age' => '23',],
    ['name' => '李四', 'age' => '16',],
];
$stringUsers = array_map(function($user){
    return implode('-',array_values($user));
},$users);
print_r($stringUsers);

分页

$total = 100;
echo min($total,max(1,$_GET['page']??1));

setcookie

第四个参数是设置路径,规定cookie只可以在某个文件夹里访问使用,设置为/
第五个参数是设置域名,默认本域名,可以设置主域名之后 就可以被子域名访问 设置为空就是本域名

session

session_save_path 可以设置session的路径,一个服务器有十个网站的话 就可以区分开目录 优化性能 
不然的话  一个文件夹有十万个sessin的文件,导致性能下降

放在start之前使用

定时任务

定时的概念就是做一个算式,当结果等于期望的值 再执行某些操作.

声明类方法的关键字

public - 默认 可以不写,但最好写上
protected 受保护的方法,可以被子类访问
private 收保护的方法

子类不可以重父亲的关键字

父亲的方法名加上 final  子类(不小心)重写的时候就会报错

抽象类

关键字是:abstract
有抽象方法的类叫做抽象类
抽象类内规定了一个ab开头的类的话,子类必须要实现

构造函数

class class_name{

    function __construct($name,$sex,$age){
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }

}

new class_name('张三','李四','18');

获取用户ip地址

function getIp()
{

    if (!empty($_SERVER["HTTP_CLIENT_IP"])){
        $cip = $_SERVER["HTTP_CLIENT_IP"];
    } elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } elseif (!empty($_SERVER["REMOTE_ADDR"])) {
        $cip = $_SERVER["REMOTE_ADDR"];
    } else {
        $cip = '';
    }
    preg_match("/[\d\.]{7,15}/", $cip, $cips);
    $cip = isset($cips[0]) ? $cips[0] : 'unknown';
    unset($cips);

    return $cip;
}

清除一段富文本内容中的图片

    $html_string = htmlspecialchars_decode($post['details']);
    $content = str_replace(" ", "", $html_string);
    $contents = strip_tags($content);
    $text = mb_substr($contents, 0, 20, "utf-8");

获取2个时间的差距 时间差



/**
 * @User  : Mr.Zhang
 * @Date  : 2020/9/7
 * @Time  : 15:52
 *
 * @param    $date1
 * @param    $date2
 *
 * @return array
 *
 * No time order, return a positive integer
 */
function diffDate($date1, $date2)
{
    if (strtotime($date1) > strtotime($date2)){
        $tmp   = $date2;
        $date2 = $date1;
        $date1 = $tmp;
    }
    list($Y1, $m1, $d1) = explode('-', $date1);
    list($Y2, $m2, $d2) = explode('-', $date2);
    $Y = $Y2 - $Y1;
    $m = $m2 - $m1;
    $d = $d2 - $d1;
    if ($d < 0){
        $d += (int) date('t', strtotime("-1 month $date2"));
        $m--;
    }
    if ($m < 0){
        $m += 12;
        $y--;
    }

    return [ '0' => $Y, '1' => $m, '2' => $d ];
}

通过身份证号码获取用户年龄


/**
 * @User  : Mr.Zhang
 * @Date  : 2020/9/7
 * @Time  : 15:52
 *
 * @param $IdCard identification number
 *
 * @return array
 *
 */

function getIdCardAge($IdCard)
{
    $IdCard = str_replace(' ', '', $IdCard);
    $IdCard = trim($IdCard);
    if ( strlen($IdCard) == 15 || strlen($IdCard) == 18 ){
        if (strlen($IdCard) == 15){
            $birthday = '19' . substr($IdCard, 6, 6);
        }
        if (strlen($IdCard) == 18){
            $birthday = substr($IdCard, 6, 8);
        }
        $time1 = date("Y-m-d", strtotime($birthday));
        $time2 = date("Y-m-d");

        return diffDate($time1, $time2);
    }

    return false;
}

通过身份证号获取用户性别


/**
 * @User  : Mr.Zhang
 * @Date  : 2020/9/7
 * @Time  : 15:52
 *
 * @param $IdCard identification number
 * @param $man    default 1
 * @param $woman  default 2
 *
 * @return Int OR Bool OR String
 *
 * The default returns 1 or 0 1 means male 2 means female
 */

function getIdCardSex($IdCard, $man = 1, $woman = 0)
{
    $IdCard = str_replace(' ', '', $IdCard);
    $IdCard = trim($IdCard);
    if ( strlen($IdCard) == 15 || strlen($IdCard) == 18 ){
        return substr($IdCard, ( strlen($IdCard) == 18 ? -2 : -1 ), 1) % 2 ? $man : $woman;
    }

    return false;
}

获取2个日期之间的日期 数组方式返回

/**
* @User: Mr.Zhang
* @Date: 2020/9/11
* @Time: 17:23
*
* @param $start_time =开始日期
* @param $end_time   =结束日期
*
* 给定2个日期,返回这个日期之内的每一天
*
* @return array
*/

function periodDate($start_time, $end_time)
{
    $start_time = strtotime($start_time);
    $end_time   = strtotime($end_time);
    $i          = 0;
    while ($start_time <= $end_time) {
        $arr[$i]    = date('Y-m-d', $start_time);
        $start_time = strtotime('+1 day', $start_time);
        $i++;
    }

    return $arr;
}

文档来源: https://gitee.com/houdunren/code/blob/master

results matching ""

    No results matching ""