PHP 常用案例 (实践向记录)

#常用案例


## php base 父类等 初始化配置
/**
     * @param array $attributes
     */
    public function __construct(array $attributes = [])
    {
        if ($attributes instanceof Arrayable) {
            $attributes = $attributes->toArray();
        }

        parent::__construct($attributes); //数组数据,存放到统一属性值里面
        $this->init(); //初始化
        $this->filter(); //过滤掉不需要验证的字段
    }

    /**
     * 校验前初始化操作
     *
     * @return void
     */
    public function init()
    {
    }
	

//php后台判断ajax请求
if (isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && $_SERVER["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest") {
}

ini_set("error_reporting","E_ALL & ~E_NOTICE"); //忽略错误

//###mysqli stmt预处理参数绑定
mysql  stmt预处理
$db = new mysqli($mysql_server,$mysql_username,$mysql_password,$mysql_database) or die("error connecting");
mysqli_query($conn,"set names 'utf8'"); //数据库输出编码
$stmt = $db->prepare('SELECT id, title, content FROM posts WHERE id = ?');
$stmt->bind_param('i', $id);
$stmt->execute();
//如果能用get_result,一句就能返回
return $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
//如果不能用get_result,那就得改成下面
$stmt->bind_result($id, $title, $content);
$stmt->store_result();
$rows = array();
$i = 0;
while ($stmt->fetch()) {
    $rows[$i]['id'] = $id;
    $rows[$i]['post_title'] = $title;
    $rows[$i]['post_content'] = $content;
    $i++;
}
$stmt->free_result();
$stmt->close();
return $rows;

//一维数组判断值重复(空值除外)校验
 if (count($arr) !== count(array_unique($arr))) {
     $repeat_arr = array_diff_assoc ($arr, array_unique($arr));
     foreach ($repeat_arr as $v){
       if(!empty($v)){
       echo '空值除外的数组值重复';
       }
    }
 }

 json_decode(json_encode($array,true),true) 对象转数组

//### sql批量更新

 	var express_fix = express_no_json.replace(/express_no/g,'');
	//批量更新 public function updateBatch($multipleData = []) { try { if (empty($multipleData)) { throw new \Exception("数据不能为空"); } $tableName = DB::getTablePrefix() . $this->getTable(); // 表名 $firstRow = current($multipleData); $updateColumn = array_keys($firstRow); // 默认以id为条件更新,如果没有ID则以第一个字段为条件 $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn); unset($updateColumn[0]); // 拼接sql语句 $updateSql = "UPDATE " . $tableName . " SET "; $sets = []; $bindings = []; foreach ($updateColumn as $uColumn) { $setSql = "`" . $uColumn . "` = CASE "; foreach ($multipleData as $data) { $setSql .= "WHEN `" . $referenceColumn . "` = ? THEN ? "; $bindings[] = $data[$referenceColumn]; $bindings[] = $data[$uColumn]; } $setSql .= "ELSE `" . $uColumn . "` END "; $sets[] = $setSql; } $updateSql .= implode(', ', $sets); $whereIn = collect($multipleData)->pluck($referenceColumn)->values()->all(); $bindings = array_merge($bindings, $whereIn); $whereIn = rtrim(str_repeat('?,', count($whereIn)), ','); $updateSql = rtrim($updateSql, ", ") . " WHERE `" . $referenceColumn . "` IN (" . $whereIn . ")"; // 传入预处理sql语句和对应绑定数据 return DB::update($updateSql, $bindings); } catch (\Exception $e) { return false; } }



###call_user_func_array 推荐用

call_user_func_array($callback,$param)
调用函数方法 call_user_func_array('funcA', array("111", "222"));
调用类里方法 call_user_func_array(array('ClassA','bc'), array("111", "222"));

call_user_func ($callback ,$param1,$param2) //第一个参数是回调 其余是参数
调用函数方法 call_user_func('funcA', "111","222");
调用类里方法 call_user_func(array("ClassA", "b"),"111");

//可参考 [https://blog.csdn.net/u014532717/article/details/56015077](https://blog.csdn.net/u014532717/article/details/56015077)

//案例
回调函数:我的理解:参数形式使用匿名函数

调用 funcUse(param1,function(){
});

定义:
funcUse(param1,$callback){
	里面用 call_user_func ($callback)
}

&&& method_exists

if(method_exists($this, 'son_fun1')) echo 'son_fun1存在';

Class相关

static 延迟绑定
    代表继承后的类,多用于父类中填写
    用户属性与方法时代表类的规则

self 当前类
指向出现的当前类,子类中继承的方法调用的类实际上是父类

parent 父类
多用来复写父类方法与属性

$this
代表类实例化后的对象

abstract | interface
	abstract 复写
	interface 统一规范

Exception 错误处理
	throw 类中抛出错误,不进行处理
	try catch finally 逻辑层获取并处理错误

拦截器(overloading | interceptor | 魔术方法)

    __call()  //当对象访问不存在的方法
	__callStatic() //[https://www.recwe.com/article/72](https://www.recwe.com/article/72)
    __construct() | destruct()
    __get() | set() //当对象访问不存在的属性 设置不存在的属性
 	array_splice(array,start,length,array) //数组中的一系列元素,但不返回,而是删除它们并用其它值代替
	array_slice(array,start,length,preserve) //数组中根据条件取出一段值

$names = ['张三','李四','王麻子','李四',];
$names = array_values(array_diff($names, ['李四']));

array_flip 键值反转

 	compact() 函数创建一个包含变量名和它们的值的数组

substr(__FILE__,strlen(__DIR__)-strlen(__FILE__)+1)  获取当前脚本当前文件名

PHP 根据数组值取得键值
    $arr = [1 => '余温', 3 => '红楼梦', '内容' => '水浒传'];
    echo array_search('红楼梦', $arr) . '</br>';
    //echo: 3;


php将两个数组相同的key合并到一个数组:
https://www.cnblogs.com/wrld/p/10966190.html

$shop_name = array_column($arr2, 'shop_name', 'id');
foreach($arr as $key => $item) {
    $exist = array_key_exists($item['id'], $shop_name);
    $arr[$key]['shop_name'] = $exist ? $shop_name[$item['id']] : '';
}

array_map array_filter 配合使用
		$basicParam = [ [['sid', 'd'], 0], [['cid', 'd'], 0], ['keyword', '', '', 'store_name'], ['priceOrder', ''], ['salesOrder', ''], [['type', 0], 0],  	['ids', ''], ['selectId', ''] ]; 

  $param = $request->param(); 
  // [['news', 'd'], 0, '', 'is_new'] 
  //这四个变量根据request过来 没值则剔除 
  // [['hot', 'd'], 0, '', 'is_hot'] 
  // [['benefit', 'd'], 0, '', 'is_benefit'] 
  // [['best', 'd'], 0, '', 'is_best'] 
  $key_param = array_keys($param); 
  $otherParam = array_map(function($v){ 
    if (in_array($v, ['news','hot','best','benefit'])){ 
      return [[$v, 'd'], 0, '', 'is_'.$v]; }else{ return null; 
    } 
  }, $key_param); 
  $otherParam = array_filter($otherParam);//过滤掉null 

  $input_param = $basicParam; 

  foreach ($otherParam as $v){
   $input_param[] = $v; 
  }


记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论