指针函数
next(); //下一个
prev(); //上一个
reset(); //回到第一个
end(); //回到最后一个
each(); //指针移动
key(); //获取当前的下标
current(); //获取当前的值
超全局数组
$_SERVER //服务器变量
$_GET //环境变量
$_POST //HTTP GET变量
$_ENV //HTTP POST变量
$_FILES //request变量
$_REQUEST //HTTP文件上传变量
$_COOKIE //HTTP Cookies
$_SESSION //Session变量
$GLOBALS //Global变量
//超全局数组 页脚预定义变量
数组函数
array_change_key_case // 将数组中的所有键名修改为全大写或小写
array_chunk // 将一个数组分割成多个
array_column // 返回数组中指定的一列
array_combine // 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
array_count_values // 统计数组中所有的值 **
array_diff_assoc // 带索引检查计算数组的差集
array_diff_key // 使用键名比较计算数组的差集
array_diff_uassoc // 用用户提供的回调函数做索引检查来计算数组的差集
array_diff_ukey // 用回调函数对键名比较计算数组的差集
array_diff // 计算数组的差集
array_fill_keys // 使用指定的键和值填充数组
array_fill // 用给定的值填充数组
array_filter // 用回调函数过滤数组中的单元 **
array_flip // 交换数组中的键和值
array_intersect_assoc // 带索引检查计算数组的交集
array_intersect_key // 使用键名比较计算数组的交集
array_intersect_uassoc // 带索引检查计算数组的交集,用回调函数比较索引
array_intersect_ukey // 用回调函数比较键名来计算数组的交集
array_intersect // 计算数组的交集
array_key_exists // 检查数组里是否有指定的键名或索引 **
array_keys // 返回数组中部分的或所有的键名
array_map // 为数组的每个元素应用回调函数 **
array_merge_recursive // 递归地合并一个或多个数组
array_merge // 合并一个或多个数组
array_multisort // 对多个数组或多维数组进行排序
array_pad // 以指定长度将一个值填充进数组
array_pop // 弹出数组最后一个单元(出栈)
array_product // 计算数组中所有值的乘积
array_push // 将一个或多个单元压入数组的末尾(入栈)
array_rand // 从数组中随机取出一个或多个单元
array_reduce // 用回调函数迭代地将数组简化为单一的值
array_replace_recursive // 使用传递的数组递归替换第一个数组的元素
array_replace // 使用传递的数组替换第一个数组的元素
array_reverse // 返回单元顺序相反的数组
array_search // 在数组中搜索给定的值,如果成功则返回首个相应的键名
array_shift // 将数组开头的单元移出数组
array_slice // 从数组中取出一段
array_splice // 去掉数组中的某一部分并用其它值取代
array_sum // 对数组中所有值求和
array_udiff_assoc // 带索引检查计算数组的差集,用回调函数比较数据
array_udiff_uassoc // 带索引检查计算数组的差集,用回调函数比较数据和索引
array_udiff // 用回调函数比较数据来计算数组的差集
array_uintersect_assoc // 带索引检查计算数组的交集,用回调函数比较数据
array_uintersect_uassoc // 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
array_uintersect // 计算数组的交集,用回调函数比较数据
array_unique // 移除数组中重复的值
array_unshift // 在数组开头插入一个或多个单元
array_values // 返回数组中所有的值 **
array_walk_recursive // 对数组中的每个成员递归地应用用户函数
array_walk // 使用用户自定义函数对数组中的每个元素做回调处理 **
arsort // 对数组进行逆向排序并保持索引关系
asort // 对数组进行排序并保持索引关系
compact // 建立一个数组,包括变量名和它们的值
count // 计算数组中的单元数目,或对象中的属性个数 **
current // 返回数组中的当前单元
each // 返回数组中当前的键/值对并将数组指针向前移动一步
end // 将数组的内部指针指向最后一个单元
extract // 从数组中将变量导入到当前的符号表
in_array // 检查数组中是否存在某个值
key_exists // 别名 array_key_exists
key // 从关联数组中取得键名
krsort // 对数组按照键名逆向排序
ksort // 对数组按照键名排序
list // 把数组中的值赋给一组变量
natcasesort // 用“自然排序”算法对数组进行不区分大小写字母的排序
natsort // 用“自然排序”算法对数组排序
next // 将数组中的内部指针向前移动一位
pos // current 的别名
prev // 将数组的内部指针倒回一位
range // 根据范围创建数组,包含指定的元素
reset // 将数组的内部指针指向第一个单元
rsort // 对数组逆向排序
shuffle // 打乱数组
sizeof // count 的别名
sort // 对数组排序
uasort // 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
uksort // 使用用户自定义的比较函数对数组中的键名进行排序
usort // 使用用户自定义的比较函数对数组中的值进行排序
array // 新建一个数组
类
- 子类使用extends继承父类,子烈可以将父类中所有的内容都继承过来
- private 这是私有修饰符,只能自己用,不能其他类用,包括自己的子类也不能用。
- proteced 这个是保护的权限,只能是自己和自己的子类可以使用的成员,不能在外面使用。
- public 这个是公开的权限,所有都可以用、自己、子类、类外部都可以使用.
- 对象->成员
- 类::成员
- parent::成员 使用parent::访问父类中被覆盖的方法 构造方法也可以覆盖
- static 可以修改属性和方法,不能修饰类
- 使用static修饰成员属性,存在内存的初始化静态段。
- 可以被所有同一类的对象共用。
- 第一个用到类(类名第一次出现),类在加载到内存时,就已经将静态成员加到内存了。
- 静态的成员一定要使用类来访问。 ojb::obj = new obj(); $obj->dd;
- self可以在类中的方法中,代表自己类的(dd;
- 静态成员一旦加载,只有脚本结束才会被释放。
- 在静态的方法中,不能访问非静态成员的。 换句话说就是在静态方法当中不能使用$this->关键字
- 只要是能使用静态的环境下声明方法,就是最好使用静态方法(效率)
- count 修饰的成员属性为常量,只能修饰成员属性
- 常量建议使用大写,不能使用$
- 常量一定要在声明时就给好初始值
- 常量的访问方式和static的访问方式相同,但只能读
- 在类外部使用 类名::常量名
- 在类的内部用 self::常量名
|
private |
protected |
public(默认) |
自己类中 |
是 |
是 |
是 |
子类中 |
|
是 |
是 |
类的外部 |
|
|
是 |
类 抽象方法和抽象类
- 抽象方法定义:一个方法如果没有方法体(一个方法,不使用{},直接使用分好结束的方法,才是没有方法体的方法),则这个方法就是抽象方法
- 声明一个方法,不使用{},而直接分号结束。
- 如果是抽象方法,必须使用abstract(抽象关键字来修饰)
- 抽象类定义:如果一个类中有一个方法是抽象方法,则这个类就是抽象类。如果声明一个抽象类,则这个类不必须要使用 abstract关键字来修饰
- 只要使用abstract 修饰的类,就是抽象类。(可以没有抽象方法)
- 抽象类是一种特殊的类,特殊在抽象类中可以有抽象方法。
- 除了在抽象类中可以有抽象方法以外,和正常的类完全一样。
abstract class Demo
{
public $name;
public $age;
//特殊的方法抽象方法的存在
abstract function say();
abstract function eat();
public function run()
{
echo "Hello World~!";
}
}
类 抽象类和接口
- 抽象类是一种抽象的类,接口是一种特殊的抽象类,接口也是一种特殊的类
- 抽象类和接口中都有抽象方法。
- 抽象类和接口都不能创建实例对象。
- 抽象类和接口使用意义也就是作用相同。 (都是定义一些规范)
-
接口和对象相比:
- 接口中的方法,必须全要是抽象方法(不能用不抽象的方法)
- 接口中的成员属性,必须是常量(不能是变量)
- 所有的权限必须是共有的(public)
- 声明接口不是用class,而使用interface
-
接口应用的有些细节:
- 可以使用extends 让一个接口继承另一个接口(接口和接口----只有扩展新抽象方法,没有覆盖的关系)
- 可以使用一个类来实现接口中的全部方法,也可以使用一个抽象类,来实现接口中的部分方法
- (类与接口,抽象类与接口--覆盖--重写,实现接口中的抽象方法)
- 就不要使用extends 这个关键字,使用implements实现
- implements 相当于 extends extends继承(扩展)。在php当中一个类只能有一个父类
//声明一个接口使用 interface
interface Demo
{
const NAME = "deme";
const SEX = "1";
public function test();
public function test2();
public function test3();
}
interface Test extends Demo
{
public function test4();
}
abstract class Hello implements Test
{
}
类 多态特性
interface USB
{
const OSD = 12;
public function load();
public function run();
public function stop();
}
class Cumputer
{
public function useUSB(USB $usb)
{
$usb->load();
$usb->run();
$usb->stop();
}
}
class Mouse implements USB
{
static $keys = '鼠标';
public function load()
{
// TODO: Implement load() method.
echo "加载".self::$keys."成功".PHP_EOL;
}
public function run()
{
// TODO: Implement run() method.
echo "运行".self::$keys."功能".PHP_EOL;
}
public function stop()
{
// TODO: Implement stop() method.
echo "结束".self::$keys."成功".PHP_EOL;
}
}
class KeyPress implements USB
{
static $keys = '键盘';
public function load()
{
// TODO: Implement load() method.
echo "加载".self::$keys."成功".PHP_EOL;
}
public function run()
{
// TODO: Implement run() method.
echo "运行".self::$keys."功能".PHP_EOL;
}
public function stop()
{
// TODO: Implement stop() method.
echo "结束".self::$keys."成功".PHP_EOL;
}
}
class Worker
{
public function use()
{
$c = new Cumputer();
$m = new Mouse();
$k = new KeyPress();
$c->useUSB($m);
}
}
$w = new Worker();
$w->use();