红色的一般都是重点,还有自己的一些废话
运算符
算术运算符: 基本运算(除数不能为0)
比较运算符: 大小比较(类型比较), 如果两个类型不一样,系统会自动转换成统一类型
赋值运算符: 基本赋值和运算赋值(右边是一个计算整体)
逻辑运算符: 是对结果进行运算(逻辑与,逻辑或称之为短路运算)
错误抑制符: 抑制简单错误
连接运算符: 把两边数据当做字符串连接
三目运算符: 简单的if else结构(复合三目运算,内部三目运算用括号包裹)
自操作运算: 前置与后置的区别
位运算符: 按位比较, 计算机码(原码,反码和补码)
$a = 5;
00000000 00000000 00000000 00000101; //正数: 原码反码补码一样
Var_dump(~$a);
//取反: 什么都反过来
11111111 111111111 111111111 11111010; //系统内部: 符号位1,认为是负数(补码)
//求反码(符号位不变) -1操作
11111111 111111111 111111111 11111001; //反码
//求原码(符号位不变)
1000000 000000000 00000000 00000110; //原码: -6
符号结合的优先级
代码执行结构: 顺序结构(默认的),分支结构,循环结构
分支结构: if分支和switch分支
循环结构: for循环,while循环和do-while循环
循环结构内部控制 : 有时候在循环的内部可能碰到某些特殊情况,需要让循环中止或者终止, 需要使用内部控制语句: continue和break
Continue: 中止,中间停止,以下的内容不再继续,重新开始循环
Break: 终止, 绝对停止, 整个循环结束
不管是continue还是break,不单单只能控制自己的循环,而且还能控制外部循环(前提是被循环包含),可以使用循环层数来控制
Continue/break 循环层数; //循环层数默认是1
模板标签: 用来替换大括号, 为了让代码结构更明显
函数: 实现某个功能的代码集合, 实现代码的复用
函数要素: 关键字,函数名,参数列表(形参和实参),函数体,返回值
参数传值: 值传递(默认的)和引用传递(定义形参的时候指定地址符)
函数
所谓函数就个一个功能,例如计算乘法九九表,这就是一个功能
参数默认值
参数默认值: 在定义函数的时候, 发现参数有可能外部在传入的时候基本一致,使用某个固定的值: 为了给函数调用者提供方便: 可以给形参指定一个默认值,那么当用户在调用函数的时候,如果不给实际参数,那么对应的形参就会使用默认值来进行处理.
Function 函数名(参数名 = 值){
//参数没有真正的值: 形参是在调用的时候才会被赋值
}
如果说一个函数有多个参数,那么有默认值的参数必须放到没有默认值的参数之后,否则没有办法使用默认值.
返回值
Return关键字: return代表返回数据给函数调用处: 代表函数的结束(一定碰到return,函数必然结束)---这里我要解释一下:如果一个函数里面有retur n就会将结果返回给调用处并且不管下面还有什么就直接结束
只要是函数一定有返回值: 但是不一定有return,如果函数没有明确使用return返回值,那么函数执行结束,默认返回NULL
函数体
函数体: 实现函数的核心部分, 可以几乎是任意代码(变量,常量,分支结构,循环结构)
作用域
--作用域要理解清楚什么是全局作用域和什么是局部作用域
PHP作用域: 变量可以被使用的范围(scope)
程序作用域: 全局作用域和局部作用域
全局: 任何地方都可以使用
局部: 只有某个特定的空间内部可以使用
PHP中也有全局作用域和局部作用域
PHP全局: 外部作用域, 凡是在结构(函数和类)的外部
PHP局部: 内部作用域, 只能在结构的内部(特定函数自己)
在不同的作用域中定义的变量也分为两种:全局变量和局部变量
全局变量: 在函数外部定义的变量
局部变量: 在函数内部定义的变量
全局作用域只能访问全局变量; 局部作用域只能访问局部变量
跨”域”访问
希望在局部作用域可以访问全局变量(成立)
方案1: 引用传值
--$GLOBALS这是一个关键字
方案2: 所有的全局变量都会自动收纳到$GLOBALS超全局预定义变量中
超全局: 超越全局, 没有作用域的限制: 可以在函数的内部使用$GLOBALS来访问全局变量
注意: $GLOBALS不是引用全局变量,而是直接代表全局变量: 删除
方案3: 使用global关键字引入全局变量
Global关键字: 在函数内部定义一个与全局变量同名的变量名, 系统会自动尝试去全局作用域中找同名的变量: global只能声明,不能复制
找到: 将全局变量所指向的内存地址赋值给内部定义的同名局部变量(形成引用)
没有找到: 在全局作用域创建一个与局部变量同名的全局变量: 指向同一块内存地址
在全局作用域可以访问局部变量(不成立): 利用了global关键字通过在函数内部创建一个同名的全局变量, 最终访问的是全局变量
静态变量
静态变量: 不是在函数调用的时候初始化的, 而是在函数进行编译的时候就已经初始化(只初始化一次), 函数在调用的过程中,都是直接使用静态变量.
--静态变量有一个非常明显的功能是在跨函数,以后会学到
静态变量关键字:
static
基本语法: 在声明的局部变量之前,加上一个static关键字(static只能修饰局部变量)
静态的原因: 静态变量只会在函数加载到内存的时候直接初始化
匿名函数
匿名函数: 没有名字的函数.
通过变量来保存函数的内存地址
$变量名 = function(参数列表){
//函数体
//返回值
};
使用匿名函数: 通过变量找到函数地址,还必须告诉当前内容是函数,必须当做函数来解析: 系统只要碰到()就认为是函数.
$变量名(); //通过$func找到函数所在地址; 通过()确定当做函数处理
匿名函数的意义
- 当做函数的回调函数callback(callable): 很多时候一个函数只能解决一个问题, 需要其他额外的函数来帮助处理,
利用回调函数(包含匿名函数)
- 闭包函数: 函数内部定义了函数,但是内部函数想使用外部函数的局部变量
可变函数
可变函数: 一个变量保存的值刚好是一个函数的名字,那么就可以通过变量直接访问函数,(加())
可变函数通常是作为回调函数实现.
课堂作业: 求1到指定数之间的立方和(回调函数)
伪类型
伪类型: 假的数据类型, 因为数据类型太具体了,有时候需要的并不止是某一种具体的数据类型.
如果是写在参数中,说明参数类型可以是以下类型; 如果是放在函数前,说明函数的返回值是以下类型.
Mixed: 混合的,可以出现多种数据类型
Number: 数值型的, 整型,浮点型和数值型字符串
Callback: 回调函数(必须传入一个自定义函数的名字字符串)
Void: 空,什么都没有
数据类型验证
这个希望你们都记住以后会经常用的上,还有很多这些类型可以上网上下一个php手册
针对每一种数据类型,系统都有函数对其进行类型验证.
is_bool: 判断类型是否是布尔型
is_float: 浮点型判断
is_integer: 整型判断
is_object: 对象判断
is_array: 数组判断
is_string: 字符串判断
is_resource: 资源判断
is_scalar: 标量类型判断(四种基本类型判断)
is_null: 空判断
is_numeric: 数值型判断
Gettype: 获取数据的类型,返回的是类型字符串
Settype: 设置类型,会强制转换数据本身.
数据类型转换
数据类型转换: 数据在某些特定情况下,需要指定的类型才能完成任务, 但是数据本身可能不属于指定的数据类型: 需要将类型进行转换.
PHP数据类型转换分为两种: 自动转换和强制转换
自动转换
系统在判断的时候会自动的去确定数据类型,凡是不合理的地方都会进行自动的转换.
碰到条件判断: 系统会自动转换成布尔结果
碰到.运算符: 系统会自动将数据转换成字符串
碰到算术运算符: 系统会自动将数据转换成数值
字符串转数值的规则
- 以数字开头的会保留所有的数字,如$a2
- 以小数点开始的,会保留一个小数及之后数字,如$a3和$a4
- 如果以字母开头,结果为0
强制转换
有时候为了数据的使用方便: 严谨的程序猿不喜欢被自动转换, 需要所有的东西都在自己的控制之内, 需要手动根据需求去转换数据类型.
强制转换的语法: 不会使用settype转换的不止是类型,会改变值.
(目标类型)变量;
Int
Integer: 整型转换
Bool
Boolean: 布尔转换
Float: 浮点转换
String: 字符串转换
Array: 数组转换
Object: 对象转换
文件包含
文件包含: 在一个文件中,将另外一个文件的内容取出来放到加载(包含)文件的位置
文件包含意义
本质就是一个意义: 实现代码的复用
- 文件包含适用于HTML的布局
- 实现PHP代码的复用: 将PHP的代码进行逻辑上的分离,为了更好的维护
文件包含实现
将另外一个文件里面的内容获取过来.
PHP提供了很多方式: include和include_once, require和require_once
四个的使用语法都一样(完全一样)
Include ‘文件路径’ /(‘文件路径’);
文件包含原理
文件的独立存在进行编译
文件包含使用
在PHP中将文件包含作为两种使用方式: 向上包含和向下包含
向上包含: 在所有代码还没有开始写之前,先加载别的文件: 目的是为了使用被包含文件中的内容(结构)
向下包含: 自己已经拥有了很多内容, 在定义完内容(结构)之后,加载别的文件: 目的为了在别的脚本中使用自己的内容.
文件包含形式的区别
Include和include_once, require和require_once
Include和include_once的区别: include_once只包含一个文件最多一次,include会多次重复包含.
Include重复加载
Include_once重复加载
Include与require的区别: 本质上没有区别,都是加载文件: 区别在于当被加载的文件不存在的时候,对于错误的处理态度不一样
Include会给出警告,不影响脚本执行
Require会给出致命错误,终止脚本执行
文件路径
任何文件在进行包含的时候都必须指定路径
路径分为两种: 绝对路径和相对路径
绝对路径: 从磁盘根目录开始的路径(一定能找到)
D:/server/apache/htdocs/20150920/demo10_include.php
相对路径: 相对当前被访问的文件所在的文件夹的路径
./: 当前文件所在目录
../: 当前文件所在目录的上级目录
/: 网站URL中,表示网站根目录
默认的,不指定任何内容,直接使用文件名,系统也认为是当前文件所在的目录
相对路径改变
在任何一个系统(windows和linux)的文件夹下都有两个看不到的文件(. 和 ..), .代表当前目录, .. 代表上级目录.
如果当一个文件使用./和../进行文件包含的时候, 这个时候又被另外一个文件包含, 自己的相对路径.和..就会变成别人的相对路径.和..
解决方案1: 不用使用./和../作为相对路径的检索
解决方案2: 使用绝对路径
解决方案3: 所有的文件都放在同一个文件夹
系统函数
讲一些常用的系统函数
将系统函数分成了三类来讲: 字符串相关函数, 数学相关函数和时间日期相关函数.
字符串函数
不解释:这些经常用的
Strlen: 字符串的长度(PHP中基本上是以字节为单位)
Substr: 字符串截取
Substr(要截取的字符串,截取的起始位置[,截取长度]);
//不指定长度截取到最后
Strtolower: 全部小写
Strtoupper: 全部大写
Ucfirst: 首字母大写
Strrev: 字符串反转(中文不能反)
Strpos: position位置,获取某个字符串在目标字符串中的位置(从左边开始)
Strrpos: 从右边开始
Strchr: 字符串截取,不同于substr的是直接截取到最后(从左边开始)
strrchr(获取文件后缀名): 从右边开始
Trim: 默认的取出字符串两边的空格, 也可以去除两边的指定字符串
Str_repeat: 重复输出某个数据
时间日期函数
Time: 获取一个当前时间的时间戳,从格林威治时间开始
时间戳指的是当前每时每刻的时间
Date: 将一个时间戳转换成指定格式的时间,如果不指定时间戳,就是当前时间
在date函数的第一个参数里植入对应的占位符, 系统只会解析占位符,其他的正常保留
Strtotime: 将一个时间字符串(可以是英文描述)转换成时间戳
Microtime: 获取一个微秒时间
数学函数
Abs: 绝对值
Floor: 向下取整, 获取一个比当前数值小的最大整数
---例如:3.1取到3;意思是要取到比3.1小的整数
Ceil: 向上取整, 获取一个比当前数值大的最小整数
--相反---例如:3.1取到3;意思是要取到比3.1小的整数
Round: 四舍五入
Rand: 获取一个指定区间的随机整数 --给你一个区域,自动抽取
mt_rand: 获取一个指定区间的随机整数
作业:
- 打印菱形: 函数实现, 可以随意控制层级
*
***
*****
***
*
- 打印空心菱形
*
* *
* *
* *
*
1, 2题代码在下面,--我做的不一定是好的我只是实现的功能给你参考而已
- 根据代码画内存图
<?php
Function display(&$name,$age = 10){
Static $count =
0;
$name = ‘mark’;
Unset($age);
Echo ++$count;
}
Display();
Display();
?>
需求: 求1到指定数之间的立方和(回调函数)
求立方
求和: 将所有的数的立方累加起来: 用到已经定义的好外部的求立方的函数
菱形:
function sum($book){
for($i=1;$i<$book;$i++){
for($k=$book;$k>=$i;$k--){
echo
" ";
}
for($j=1;$j<=$i;$j++){
echo
"\t"."*";
}
echo
'<br/>';
}
for($i=$book;$i>0;$i--){
for($k=$book;$k>=$i;$k--){
echo
" ";
}
for($j=0;$j<=$i-1;$j++){
echo
"\t".'*';
}
echo
'<br/>';
}
}
sum(35);
一般2个for循环语句一个控制行一个控制列
空心菱形:
function
display($sum=6){
for($i=1;$i<$sum;$i++){
for($k=$sum;$k>=$i;$k--){
echo
" ";
}
if($i>2){
//echo
"<br\>";
echo
'*';
for($j=1;$j<=$i;$j++){
echo
" "."\t";
}
echo
'*';
echo
'<br/>';
}
else{
for($j=1;$j<=$i;$j++){
echo
"\t".'*';
}
echo
'<br/>';
}
}
for($i=$sum;$i>0;$i--){
for($k=$sum;$k>=$i;$k--){
echo
" ";
}
if($i>2){
echo
"*";
for($j=0;$j<=$i-1;$j++){
echo
"\t".' ';
}
echo
"*";
echo
'<br/>';
}else{
for($j=0;$j<=$i-1;$j++){
echo
"\t".'*';
}
echo
'<br/>';
}
}
}
display(15);