php变量
变量命名规则
- 变量以$符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线(A-z,0-9和_)
- 变量名不能包含空格
- 变量名是区分大小写的(如$y与$Y是两个不同的变量)
变量作用域
变量作用域是脚本中变量可被引用使用的部分。
变量作用域种类:
- local
- global
- static
- parameter
static作用域
当一个函数完成时,它的所有变量通常都会被删除。当希望某个变量不被删除时,在第一次声明时使用static关键字。
echo与print
区别:
echo 可以输出一个或多个字符串
print 只允许输出一个字符串,返回值总为1
echo 输出的速度比 print 快,echo 没有返回值,print 有返回值 1
数据类型
php数据类型包括 string(字符串),Integer(整型),Float(浮点型),Boolean(布尔型),array(数组),object(对象),null(空值)
常量
php常量是一个简单值的标识符,该值在脚本中不能改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现(常量名不需要加$修饰符),常量是全局的
设置常量
设置常量,使用define()函数
bool define(string $name, mixed $value [,bool $case_insensitive = false])
其中 case_insensitive是可选参数,设置为true则该常量大小写不敏感,默认敏感
运算符
三元运算符
(expr1) ? (ecpr2) : (expr3)
对expr1求值为true时值为expr2,在expr1值为false时值为expr3
数组
数组是一个能在单个变量中存储多个值得特殊变量。PHP数组特点是将values映射到keys的类型,PHP中数组的key可以是字符串,而values可以是任意类型。
数组排序函数
- sort() 对数组进行升序排序
- rsort() 对数组进行降序排序
- asort() 根据关联数组的值,对数组进行升序排列
- ksort() 根据关联数组的键,对数组进行升序排列
- arsort() 根据关联数组的值,对数组进行降序排列
- krsort() 根据关联数组的键,对数组进行降序排列
超全局变量
php中预定了几个超级全局变量,意味着他们可以再一个脚本的全部作用域中都可用,不需要特别声明,就可以在函数或类中使用
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
$GLOBALS
$GLOBALS是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$_SERVER
$_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由Web服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
$_REQUEST
$_REQUEST用于手机HTML表单提交的数据
$_POST
$_POST被广泛应用于收集表单数据,需要在HTML fotm标签的指定该属性 method="post"
$_GET
魔术常量
PHP向它运行的任何脚本提供了大量的预定义常量。不过大多数常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。PHP有八个魔术常量的值随着它们在代码中的位置改变而改变。
__LINE__
文件中当前行号
__FILE__
文件的完整路径和文件名
__DIR__
文件所在目录
__FUNCTION__
函数名称
__CLASS__
类的名称
__TRAIT__
trait的名字
__METHOD__
类的方法名
__NAMESPACE__
当前命名空间的名称
面相对象
**类** 定义了一类事物的抽象特点。类的定义包含了数据的形式以及对数据的操作
**对象** 类的实例
**成员变量** 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,改变立案即可成为对象的属性
**成员函数** 定义在类的内部,可用于访问对象的数据
**继承** 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容
**父类** 一个类被其他类继承,可将该类成为父类,基类,超类
**子类** 一个类继承其他类称为子类,也可称派生类
**多态** 多态性是指相同的操作或函数、过程渴作用域多种类型的对象上并获得不同的结果。不同的对象收到同一个消息产生不同的结果,这种现象称为多态性
**重载** 就是函数或者方法有同样的名称,但是参数列表不同的情况,这种同名不同参的函数或者方法之间,互相称为重载函数或者方法
**抽象类** 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。
**封装** 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。
**构造函数** 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
**析构函数** 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
访问控制
php对属性或方法的访问控制,通过使用关键字实现
public(公有):公有的类成员可以再任何地方被访问
protected(受保护):受保护的类成员可以被其自身及其子类和父类访问
private(私有):私有的类成员只能被其所在类访问
接口
使用接口,可以指定某个类必须实现那些方法,但不需要定义这些方法的具体内容
接口中定义的所有方法都必须是共有,这是接口的特性
类可以实现多个接口,用逗号来分隔多个接口的名称
抽象类
任何一个类,如果他至少有一个方法被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类一样(或者更为宽松)。
static关键字
声明类属性或方法为static,就可以不实例化类而直接访问
静态属性不能通过一个类已实例化的对象访问(但静态方法可以)
由于静态方法不需要通过对象即可调用,所以伪变量$this
在静态方法里不可用
静态属性不可以由对象通过->操作符调用
final关键字
如果父类中的方法被声明为final,则子类无法覆盖该方法,如果一个类被声明为final,则不能被继承
调用父类构造方法
PHP不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用parent::__construct()