smarty注释,使用 {**} 包裹即可。
{* 这是一个注释 *}
smarty注释,使用 {**} 包裹即可。
{* 这是一个注释 *}
–FIND_IN_SET(子集,合集(要么等于子集,要么子集在合集逗号分隔部分里面))
已知 bind_module 是字符串,多个存储例如: 1,2,3,4,5,6,7,8,9 ,也是一个空字符串。
select * from student1 where FIND_IN_SET("1",`bind_module`)
此时,如果 bind_module=1 ,或者该集合里包含 1,条件就匹配。
如果要取反,可以在 FIND_IN_SET 前取反,使用 ! 符号,例如 :
select * from student1 where !FIND_IN_SET("1",`bind_module`)
FILD_IN_SET 和 IN 的一些用法:
已知一个查询,返回字段 $str = ‘1,2,3,4’
则要查询另一个表id为1 或 2 或 3 或 4的数据。
此时不能使用 where id in($str),因为如果使用 in 则会强制转为int,也就是相当于 where id in(1)
in 时一般是单列,可以多行,例如:
column
1
2
3
4
5
如果返回的是 ‘1,2,3,4,5’ 这样的字符串格式,则明显不能用 in ,怎么办呢?用以下sql:
where FILD_IN_SET(`id`, '1,2,3,4,5');
也就是说:where id in(1,2,3,4,5) 相当于 where FILD_IN_SET(id, ‘1,2,3,4,5’) 。
如果 elasticSearch 服务器不正常,则指定 1.5 秒连接失效时长。
ClientBuilder::create()->setHttpClientOptions(array('connect_timeout'=>1.5))->...->build();
主要方法:ClientBuilder -> setHttpClientOptions( array(‘connect_timeout’=>1.5) ) 单位为(秒)。
大多数情况下,客观规律更重要。
如果觉得不饿就不吃早饭、不困就经常熬夜,时间长了容易生病,等感觉不舒服时为时已晚。(主观规律具有一定的滞后性,客观规律最准确)
主观感受通常是不可靠的,除非你的经验足够多。
因为php没有静态代码块。
如果希望在所有的静态方法前添加一个公共方法做切点,就比较困难。
如果使用的是oop的实例方法,那么可以在构造方法中执行一些公共代码。
例如:
// api 基类
class api{
public function __construct()
{
!defined("IsApi") && define("IsApi",true);
}
}
es不支持多表联查,不支持子查询。
多表关系一般有4种处理方式。
1.客户端结合(多次查询)
2.宽表
3.嵌套类型
4.父子文档。
另外,es不支持子查询,对于原sql的子查询,要做一定修改。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
单例模式是一种常见的设计模式,在计算机系统中,线程池、缓存、日志对象、对话框、打印机、数据库操作、显卡的驱动程序常被设计成单例。
单例模式分3种:懒汉式单例(需要时才去实例化对象)、饿汉式单例(在类加载时即创建该单例对象。)、登记式单例(挂载到其他变量中作为子节点)。
单例模式有以下3个特点:
1.只能有一个实例。
2.必须自行创建这个实例。
3.必须给其他对象提供这一实例。
那么为什么要使用PHP单例模式?
PHP一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的new操作。因为每一次new操作都会消耗系统和内存的资源。
class Single {
private $name;//声明一个私有的实例变量
private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
}
static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setname($n){ $this->name = $n; }
public function getname(){ return $this->name; }
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning
工厂模式是常用的实例化对象模式之一,用工厂方法代替new对象。
使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。
<?php
header('Content-Type:text/html;charset=utf-8');
/**
*简单工厂模式(静态工厂方法模式)
*/
/**
* Interface people 人类
*/
interface people
{
public function say();
}
/**
* Class man 继承people的男人类
*/
class man implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是男人<br>';
}
}
/**
* Class women 继承people的女人类
*/
class women implements people
{
// 具体实现people的say方法
public function say()
{
echo '我是女人<br>';
}
}
/**
* Class SimpleFactoty 工厂类
*/
class SimpleFactoty
{
// 简单工厂里的静态方法-用于创建男人对象
static function createMan()
{
return new man();
}
// 简单工厂里的静态方法-用于创建女人对象
static function createWomen()
{
return new women();
}
}
/**
* 具体调用
*/
$man = SimpleFactoty::createMan();
$man->say();
$woman = SimpleFactoty::createWomen();
$woman->say();
比较规范的ajax,比如 jquery 都会携带一个请求头:
x-requested-with
所以判断请求头是否存在即可。
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
out.print("该请求是 AJAX 异步HTTP请求。");
}else{
out.print("该请求是传统的 同步HTTP请求。");
}
如果为 ajax,但可能没有该请求头。因为它并不是规范字段。
以axios为例,就是在代码中封装的:
拦截request,设置全局请求为ajax请求 axios.interceptors.request.use((config) => { config.headers[‘X-Requested-With’] = ‘XMLHttpRequest’ return config })
附 php 判断 ajax 代码:
!defined("requestHeader") && define("requestHeader",getallheaders()); // 取得所有请求头
/**
* 判断是否为ajax请求
*/
function isAjax(){
if(requestHeader['X-Requested-With']){ // 判断是否存在ajax请求头
return true;
}else{
return false;
}
}
!defined("IsAjax") && define("IsAjax",isAjax());
函数定义,必要参数每个给予参数位,其余函数可再次封装
例如 curl 函数,已知必须 url ,其他函数不定,此时可使用 array 再次封装,其他参数从 $param 中获取:
/** 基础的 curl,默认 Get 请求
* @param $url
* @param array $param 参数
* @return bool|string
*/
function easy_curl($url,$param=array()){
$ch = curl_init($url);
// 通用设置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
// 是否设置自定义请求头
$requestHeader = $param['requestHeader'] ?: array("User-Agent: pan.baidu.com");
if($requestHeader){
curl_setopt($ch,CURLOPT_HTTPHEADER,$requestHeader);
}
// 是否为post
$postData = $param['postData'];
if($postData){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}