PHP的执行周期:
Apache接到请求
如果是php文件的话,将调用相应的php文件进行处理
一:SAPI (Server Application programming Interface)(服务器应用程序接口)
指的是 Apache 与 php之间进行通许的接口。
我们可以想象成 apache的PHP模块 就是 apache给php提供的sapi。
二,编译型语言 和 解释型语言。
计算机 只能 明白 机器语言。任何编程语言 在 最终执行的时候都需要变成对应的机器语言代码。
在以上的过程中,按照对翻译结果的处理,是否生成可直接执行的目标文件,分成编译型语言和解释型语言。
例如c语言需要形成执行文件,就是编译型。
例如 php 语言,不能形成执行文件,每次都需要php的源代码,每次都需要翻译的过程,就是叫做解释型语言。
(提示:目前有很多php的优化产品,例如apc, zend optimize, 就是通过缓存 php的翻译结果 达到优化php执行速度的目的。)
Php是解释型语言,那么都有哪些解释过程:
首先 完成解释的过程是 利用php的解释器 完成的。
1, 读入源代码
2, 词法分析
3, 语法分析(对语法是否争取加以判断)
4, 生成opcode (opcode翻译过的 能够被引擎执行的代码)
5, 执行opcode, 利用Zend 引擎 来执行opcode,Zend引擎也是php程序带的,是php的核心解释器。
基础语法:
Php是用来管理和操作数据的。
变量,起到,在PHP脚本内,保存数据的功能的
在脚本执行过程中,其值 可以发生变化的量, 变量。
变量如何定义:
语法:
$变量名 。
为变量设置值: $变量名 = 变量值。
获得变量的值: $变量名。
其中 变量名 不包含 $. $只是一个语法。
通常变量的值 可以是任何数据(什么类型的数据都可以)。而变量的名称,有一定的要求。
变量名称 大小写敏感(区分大小写)
变量名称只能字符(英文字母, 中文字符),数字,下划线组成。不能以数字开头。
由于 通常在一个脚本内 会出现多个变量,因此 要求大家在 为变量名命名时 ,应该有特定的一套规则才可以。
见名知意,通常可以用英文单词。
如果变量名内单词过多,可以采用 下划线法 或者 驼峰法 来分隔单词。
预定义变量:
通常情况下 变量都是用户自己定义的。但是 在此基础上,php系统 为我们定义了一些,包含当前的系统环境,和一些快捷操作的变量。
称之为预定义变量:
一共有 9 个,都是数组类型,都是全局变量。因此这几个预定义变量,也被称作,九大超全局数组变量。
$GLOBALS 保存全局变量
$_SERVER 保存服务器信息
$_GET 保存get数据
$_POST 保存post数据
$_FILES 保存提交的文件
$_COOKIE 保存得到的cookie
$_SESSION 保存session数据
$_REQUEST 保存请求数据
$_ENV 保存环境
其中不同的变量承担不同的任务,例如
$_SERVER,保存的服务器的信息。
可变变量:
变量名是可以变化的,某个变量的变量名可以是其他变量的值。
例如 利用可变变量 输出昵称:
变量的引用传递
变量之间的赋值分作 值传递 和 引用传递 两种方式。
值传递:
引用传递:
引用传递 通过&操作符来实现。
Unset()函数,销毁变量,释放变量。指的是销毁了变量名与变量值之间的这个引用。让变量名找不到对应的值销毁:
一道题:
参数的引用传递和返回值的引用传递(在函数中介绍)
常量:
指的是 一旦定义就不能被改变的数据就是常量。
常量的定义方式:需要利用函数去定义。
Define(常量名,常量值);
其中 常量名,规则没有限制。而且通常是区分大小写,但是可以通过配置更改成不区分。通常情况下,常量名都是大写并且使用下划线分隔。
常量不能通过赋值语句,为其设置值 只能通过define,而且常量一旦被定义 在整个脚本内不能修改同时不能销毁。常量一旦定义,在定义后的脚本的任何地方
都可以使用(没有作用域的限制)
使用常量, 直接使用常量名即可:
常量的大小写问题:
我们可以通过 define()的第三个参数规定常量的大小写是否敏感,默认为false,表示敏感
就可以这么调用:
关于常量名问题:
原则上没有任何限制,但操作上,不建议使用除了字母数字下划线之外的字符。
但是不能直接使用:
但是 常量是没有问题的
这样的常量,需要使用函数 constant(‘常量名’)函数
判断常量是否定义:
Defined(‘需要判断的常量名’)
;
我们可以通过 函数 get_defined_contants()函数 获得所有定义的常量:
通过解果 我们发现 除了我们定义的常量之外,还有很多:
预定义常量:
魔术常量: 看上去是常量的用法。外观特点,都是__开头。
常量可以保存数据 变量也可以保存数据, 为什么还要有常量?
常量不可以更改,将一些固定的数据 如目录地址,或者 数学常量(π)。
变量和常量的区别:
变量需要$声明,常量不需要。
变量可以随时更改,常量不可以。
变量名区分大小写,常量名(默认区分也可以不区分)
变量的值可以是任何的数据类型,但是通常常量的值只能是标量数据类型
数据类型:
根据数据所表示的内容不同,程序语言在处理时,采用不同的方式。这样导致数据的类型不同。就是数据类型。
在我们的php中 分为 八种数据类型:
整型,浮点型,字符串型,布尔型,数组型,对象型,资源型,NULL
又将八种数据类型 分成了三大类:
标量数据类型(基本数据类型),一个数据表示一个值。
整型,浮点型,字符串型,布尔型
整型:int integer 值应该是整数。
定义时,直接将值写出来即可,不用加任何特殊符号。
在程序语言进行处理的过程中,整型通常 不仅仅是 十进制。
Php还支持 八进制的整数 与 十六进制的整数。#ffffff;
八进制:零开头后边跟八进制数值。
十六进制: 0x开头后边跟十六进制数值。
进制之间的关系:
八进制,逢八进一。
十六进制: 逢十六进一。
进制之间的转化:
二进制:0110101
十进制与其他进制之间的转换:辗转求余
其他进制 转 成十进制。
以上的转换关系,我们如果在程序中用到了,我们可以是使用php的进制转换函数完成!
整数占4个字节的存储空间!
4个字节 4x8位 01111111 11111111 11111111 11111111
通常使用一个常量 PHP_INT_MAX表示。
一旦计算超出了整型范围,通常使用浮点型表示。
浮点型:float, 双精度。表示小数,范围较大
直接写小数的形式表示浮点数,也可以使用科学计数法表示浮点数。
理论最大值:
1.8E+308
布尔型 Boolean:
就两个值 true表示真 false 表示假,不区分大小写。
字符串 string: phpz中没有字符类型,所以的字符都用字符串去表示。
定义字符串,php中存在4种方式定义字符串数据类型。
单引号,单引号定义的字符串会原封不动地定义,如果大家定义的字符串没有任何需要解析的内容,请使用单引号。
定义字符串的单引号 不算作字符串的内容。
如果字符串内容中存在单引号,需要使用转义字符加以定义
如果内容中存在转义的斜杠\怎么办?直接使用就可以。但是不能出现在’和结尾处。
双引号,双引号定义的字符串会先尝试解析字符串的内容,最后将解析结果定义
双引号不单单能够解析变量,很多转义字符都可以解析,
但是 需要在解析变量的时候注意:
通常在双引号中,配合大括号,来告知php解析器,哪个部分是需要被单独解析的。
例如拼凑sql语句:
定界符方式:通常 在我们需要定义长字符串,或者多行字符串 或者 字符串内需要复杂的转义时,可以使用 定界符的方式定义字符串。
Heredoc
<<<标记
字符串内容
字符串内容
标记;
Nowdoc
<<<’标记’
字符串内容
标记;
与 heredoc的区别在于,heredoc可以解析变量,而nowdoc不可以解析变量。
注意,无论是使用heredoc或者nowdoc,开始和结束标记需要相同,但是可以任意。尤其注意结束的标记,需要定格写,而且在结束符行内只能有结束符自己和语句结束符;.
复合数据类型(集合数据类型)一个数据 表示多个值
数组型,对象型
数组类型,一组数据的集合,php中 是键值对的关系实现的。
定义一个数组,使用 array() 语法 或者使用 []语法都可以。
其中,key就是键 而value就是值,=> 表示键值对应关系
每一键值对,称之为一个元素,键称之为元素的下标,而值称之为元素的值。
其中 元素的下标应该为 整型或者字符串类型,如果大家使用其他的数据类型作为下标,php会自动地转换成相应的整型或者字符串型。
元素的值应该为 任何数据类型。包括数组本身。
对象型:对象被称之为有生命力的数组
对象数据类型 不单单有类似与数组一样的保存集合数据的能力,也可以有处理数据的能力。
特殊数据类型
资源型,
通常情况下,资源型数据不是用户手动创建的,而是我们在使用php的函数时,如果需要操作某些额外的资源,通常,这些资源都是使用资源类型管理的。
例如 我们需要使用对mysql数据的连接。
NULL
什么都没有,什么都不是。空。
NULL 是数据类型, 同时 null类型 只有一个值 也是null。
通常 一个变量不存在,如果去使用他,则为空。一个变量被unset掉了,则为空。
作业:
查找5个$_SERVER内的值,记住分别都是什么含义
将php提供的进制转换函数都列举出来,总结规律!。
类似 hexdec() dechex()
大家试着在定义数组时,使用非整型或者是字符串类型的数据。