18、数组
$arr[null] = 20; //array([]=>20)
$arr[] = 20;//默认为下一个下标赋值
unset()可以删除数组元素,但不会重建索引
array_values()可以重建索引

19、list()
在list中声明变量,可以将数组中的值按顺序赋给list中的变量

20、each()
用于处理数组,可以返回数组元素的键和值,键和值利用索引去获取,0和key对应键,1和value对应值,而且重复调用,each()会自动处理下一个数组

21、利用list()和each()联合while循环
while(list($key, $value) = each($arr)){
echo $key." ".$value;
}
但是接下来再进行$arr同样的while的循环时将不能够处理,因为each()内部的指针已经移到末尾,需要用reset()重置数组指针

22、控制数组指针
next(),prev(),end(),reset()
key()获取当前数组的指针位置的键
current()获取当前指针位置指向的值

23、预定义全局变量(超全局数组)
$_SERVER 服务器变量
$_ENV 环境变量
$_GET HTTP GET
$_POST HTTP POST
$_REQUEST GET POST COOKIE都可以接收
$_FILES HTTP文件上传变量
$_COOKIE HTTP cookie
$_SESSION
$GLOBALS 包含所有信息

24、数组键值函数
array_values($arr);获取所有值
array_keys($arr[, $str]);获取所有键或值对应的键
in_array($needle, $arr[,$bool]);是否存在[检查二者类型],区分大小写
array_flip($arr);返回数组键值对换新数组,注意值相同的键值对对换后发生覆盖
array_reverse($arr);返回反转数组元素新数组
array_count_values($arr);统计数组中值出现个数,返回新数组
array_unique($arr);去重值,只留下第一个,返回新数组

25、数组回调处理
array_filter($arr[,$callback]);数组过滤,默认去除空值,可自定义回调函数,返回新数组,利用回调函数的返回值决定元素去留
array_walk($arr, $callback[,$data]);对数组应用回调函数,可选参数可以传给回调函数,直接对原数组操作
例子:
$arr = array(1,2,-3,4,-5,6,-7,8,);
array_walk($arr, function(&$val){
$val = $val*2;
});
//或
array_walk($arr, function(&$val, &$key){
$val = $val*2;
$key =
});
//或
array_walk($arr, function(&$val, &$key, $reserve){
$val = $val*2;
$key =
}, $reserve);
array_map($callback, $arr1[,$arr2,...]);将回调函数作用于多个数组,并返回一个新数组
例子:
$arr1 = array(1,2,3,4,5);
$arr2 = array("one", "two", "three", "four");
//分别将$arr1和$arr2的值按序传到$v1,$v2,回调函数的返回值将作为新数组相应位置的一个新的元素,若两个数组长度不等,则缺值地方会以空值代替
array_map(function($v1, $v2){
return $v1+$v2;
}, $arr1, $arr2);

26、数组判断元素存在几个函数区别
isset(),in_array();键对应的值为假值,会返回false
array_key_exist();键对应的值为假值,返回true

27、数组排序函数
sort();数组升序
rsort();数组逆序
ksort();键名排序
krsort();键名倒序
asort();数组排序,保持索引关系
arsort();数组逆序,保持索引关系
natsort();对数组自然排序
natcasesort();对数组不区分大小写自然排序
usort();应用回调函数对数组排序
uasort();同上,保持索引关系
uksort();对键进行回调函数排序
array_multisort();对多个数组排序,第一个数组排序后,随后数组元素按照与排序前第一个数组元素相对应位置进行排序,前提两个数组的长度相等

28、数组拆分、合并
array_slice($arr, $offset[,$length[,$bool]]);截取,默认重置数组的键,$bool决定是否关联索引
array_splice(&$arr, $offset[,$length[,$replace]]);去掉元素,或用$replace替换若使用$replace,则必须指定$length
array_combine($arr1, $arr2);将两个数组合并,数组1值为键,数组2值为值,前提两个数组长度相等,数组1的值有相同的,则会发生覆盖
array_merge($arr1, ...);合并多个数组
array_intersect($arr1, ...);计算多个数组交集
array_diff($arr1, ....);计算多个数组差集

29、数组与数据结构
array_push();从尾入
array_pop();从尾出
array_unshift();从头入
array_shift();从头出

30、数组其他操作
array_rand($arr[,$num]);随机从数组中取出一个或多个下标
shuffle($arr);将数组元素顺序打乱
array_sum(&$arr);计算数组元素值得和
range($low, $high[,$step]);返回min($low,$high)->max($low,$high)的元素数组,可设定步长,$high可以任意大
array_fill($start, $length, $value);利用$value填充从$start开始的$length个元素

31、关键字
var
public
protected
private 私有,只能在类内调用
static 可以修饰方法和属性,不能修饰类,类的对象共用,静态成员需要用类名调用(::),静态方法不能访问非静态成员
instanceof用于检测某对象是否属于指定类
final修饰的类不能被继承,修饰的方法不能被重写
const只能修饰属性,被修饰的为常量,调用与静态变量相同

32、实例化对象
$var = new Lei;
$var = new Lei();

33、对象引用属性和方法的方式
$this指向类的当前实例
self指向类自身,一般用于处理类的静态成员
parent,指向父类,一般用于子类调用父类的方法

34、构造与析构方法
对象创建第一个自动调用,可有参数
function __construct(){}
对象释放最后一个自动调用,没有参数
function __destrcut(){}

35、魔术方法
__get($var);获取私有属性值
__set();为私有属性赋值
__isset();类内设置,则允许类外部利用isset()来判断私有属性
__unset();类内设置,则允许类外部利用unset()来删除私有属性
__toString();在输出对象时可以返回描述信息
__clone();类似构造方法可以对克隆的副本做初始化
__call($method, $args);
调用对象中不存在的方法时,自动调用的方法
有两个参数,第一个:调用不存在的方法的方法名,第二个:调用这个不存在的方法的方法参数
例子:
class people{
private $name = "fan";
private $age = 22;

function __get($var){
return $this->$var;
}
function __set($var, $val){
$this->$var = $val;
}
function __isset($var){
return isset($this->$var);
}
function __unset($var){
unset($this->$var);
}
function __toString(){
return "describe";
}
function __clone(){

}
}

$p = new people;
if(isset($p->name))
echo true;
echo $p->name;
$p->age = 22;
unset($p->age);

36、单例设计模式
(1) 私有化构造方法,类外部无法创建对象
(2) 定义静态变量用于存储此类对象
(3) 定义静态方法连返回对象
class Single{
static obj = null;

private __construct(){}
static function getSingle(){
if(!self::obj)
self::obj = new self;
return self::obj;
}
}

37、对象串行化
对象串行化又称为对象序列化,也就是将对象格式化为字符串,可以实现对象的永久保存,利用函数serialize()实现,从字符串可以利用unserialize()实现反串行化
魔术方法__sleep(),只要在这个方法中返回一个数组,只要那个数组中有属性的名称,则那个属性就会被串行化,注意是属性。
魔术方法__wakeup(),对象反串行化时对象初始化作用,类似__clone,__construct

随机推荐

  1. [转帖]go 的goroutine 以及 channel 的简介.

    进程,线程的概念在操作系统的书上已经有详细的介绍.进程是内存资源管理和cpu调度的执行单元.为了有效利用多核处理器的优势,将进程进一步细分,允许一个进程里存在多个线程,这多个线程还是共享同一片内存空间 ...

  2. 【BZOJ2830/洛谷3830】随机树(动态规划)

    [BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度 ...

  3. NOIP2018前的一些计划&记录(日更)

    先空着,等停课了再开始写. 诸位好,我是yyb.现在显然已经不再是高一的小蒟蒻了,已经升级为了高二的菜鸡了 现在已经不能再每天划划水切切题了,毕竟......已经高二了,所有的机会从高一的两倍全部除了 ...

  4. 九省LNOI2018退役记

    立个flag不会退役. Day 0: 水一发. 大连大学的键盘敲起来就跟敲纸似的. 膜拜要进队的gqh,yxd,sjq. (都进啦2333) (高斯消元,高原反应,分麾下治……) 给我这只弱鸡烧根香. ...

  5. Android Paging库使用详解

    Android分页包能够更轻易地在RecyclerView里面缓慢且优雅地加载数据. 许多应用从数据源消耗数据, 数据源里面有大量的数据, 但是一次却只展示一小部分. 分页包帮助应用观测和展示大量数据 ...

  6. 【bzoj4016】 FJOI2014—最短路径树问题

    http://www.lydsy.com/JudgeOnline/problem.php?id=4016 (题目链接) 题意 给出一张无向图,求出它的最小路径树,然后求最小路径树上节点数为${K}$的 ...

  7. 【2018北京集训(六)】Lcm

    Portal --> 出错啦qwq(好吧其实是没有) Description 给定两个正整数\(n,k\),选择一些互不相同的正整数,满足这些数的最小公倍数恰好为\(n\),并且这些数的和为\( ...

  8. 《剑指offer》— JavaScript(16)合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *** 思路 如果pHead1和pHead2中有一个为空,则result是另 ...

  9. Docker 及 nvidia-docker 使用

    Docker 基本用法 1. 安装社区版docker-ce 及 nvidia-docker2 插件 通过官网介绍的软件源的方式安装. 如果要安装nvidia-docker,由于其需要与docker-c ...

  10. struts的namespace理解

    转载: namespace决定了action的访问路径,默认为"",可以接受所有路径的action namespace可以写为/,或者/xxx,或者/xxx/yyy,对应的acti ...