运算符
PHP中运算符一共分为9类: 赋值运算符, 算术运算符,比较运算符, 逻辑运算符, 错误抑制符, 三目运算符, 位运算符, 自操作运算符, 连接操作符
算术运算符
算术运算: 基本运算符: +, - , * , / , %
注意: /和%运算, 除数(分母)不能为0
错误抑制符
错误抑制符: 抑制错误,不让错误表现出来.
错误抑制符号: @,在可能出现错误的语句之前使用@符号即可.
错误抑制符不能抑制fetal error(致命错误)---就是导致整个程序不能运行
赋值运算符
赋值运算: 将右边的结果保存到左边的变量中.
赋值运算符: =, +=, -=, *=, /=, %=, .=
=: 将右边的结果直接赋值给左边
*=: 复合赋值, 先将左边的变量里面保存的值取出来与右边的结果进行相应的运算
注意:一般我们运算都是从左往右运算,但是php中应该说编程语言都是从右往左算起的
例如:a=b+c 结果是将b+c的结果赋给a程序中的=号不能理解为相等,应该为理解为右边是什么就给左边是什么。
(+/-/*///%/)加减乘除取余,最后将结果重新赋值给左边的变量.—把红色看成空格就好了
注意: 在进行复合运算的时候,右边的结果应该特别注意,在进行除法或者取模的时候不能为0 相当于一个数不能除以0
计算永远是先计算右边的结果,另外是将左边变量的值一定是放在右边结果的左边
相当于先计算左边的然后计算右边
比较运算符
比较运算: 进行数据的对比, 不需要用户额外的处理,系统会自动的转换成同种类型进行比较. 比较的结果只有两种: true(真)和false(假)
比较运算符: ==, >,>=,<,<=,!=,===,!==
==: 比较两个数据的值是否相等
===: 全等,要求比较的数据本身类型完全相同
字符串进行比较的时候,是一个一个字符进行比较(比较的是ASCII码值)
逻辑运算符
逻辑运算: 是一种针对结果的运算(针对布尔进行运算)
逻辑运算符: 逻辑与(&&),逻辑或(||)和逻辑非(!)
逻辑与: 左边的结果与右边的结果同时成立(都为true),结果才为真,否则都为假
逻辑或: 左边的结果或者右边的结果至少有一个为真,那么结果就为真, 都为假时结果为假.
逻辑非: 只针对一个结果进行操作, 如果结果本身为真,那么取反后就为假.
简单的理解为小学的大于小于就ok了
因为逻辑与只要满足左边的为false,那么整个结果就是false
逻辑或只要左边的为true,那么整个结果一定是true, 后续第二个表达式就不需要判断执行: 将这种只需要计算一部分就能得到最终结果的运算方式称之为短路运算.
理解为高中的真与假
正是因为有短路运算的存在: 所以该位置存在代码优化
如果是逻辑与运算: 那么将出现false的可能性较大的放前面
这个还是要解释一下的:意思是与运算两边为真就是真,
还是看例子:a(出现假的概率很大)&& b(不管你是真还是假)假如a是假那么系统就没必要理会你b是什么鬼东西,因为与的意思是只要有一个为假整个结果都是假,
因此判断到a这里程序停止了判断b,一句话:一开始就知道结果(假),就不必往下执行了
如果是逻辑或运算: 那么将出现true的可能性较大的放前面
这个和上面的意思错不多:或运算一个为真结果都为真,还是那上面的例子:
a(出现真的概率很大)||b(不管你是真还是假)原理都一样;因此判断到a这里直接运行b不管你b是真还是假。
三目运算符
三目: 也称之为三元, 在一次运算中会出现三个表达式: 但是只会执行两个
三目运算: 是一种简化的if判断
语法格式: 表达式1 ? 表达式2 : 表达式3;
如果表达式1成立,执行表达式2;否则执行表达式3: 表达式1一定执行,表达式2和表达式3选择性执行其中一个.
三目运算中可以嵌入三目运算: 切记被嵌入的三目元素必须使用()进行包裹,要不然会因为系统分不清楚三目运算的符号而导致结果错乱.—看过盗梦空间吗,这句话可以理解为梦中梦
连接运算符
连接运算: 是php中为字符串的合并提供的一种运算方式.
连接运算符: ‘.’
系统只要一碰到’.’ ,不管前后是什么数据,都会变成字符串来操作—简单来说就是一个点,把左右两边的东西连成一串,注意要是字符串类型(“内容”)这就是一个字符串只有括号不算
自操作运算符
自操作: 自己操作自己
自操作运算符有两种: ++和--
++: 自己加1
--: 自己减1
子操作符可以放在变量前后: 前置自操作和后置自操作
++a前置自操作: 先改变自己,然后再将自己去参与可能存在的运算—加号在前
a++后置自操作: 先参与可能存在的其他运算,再改变自己—加号在后
如果没有参与其他运算: 前置自操作与后置自操作的结果是一致的.
如果自操作运算参与其他运算,那么结果就不同了.
自操作很少自己单独操作,而且几乎不可能参与运算: 通常只用于循环变量
这个东西理解起来很吃力,直到现在我都有一点模糊
位运算符
位运算: 直接深入到二进制运算, 位上只有两个值0和1(不强制要求所有人掌握)
位运算符: 按位与(&),按位或(|),按位异或(^),按位取反(~),按位右移(>>),按位左移(<<)
位运算: 要求将所有的数据先转成二进制才进行运算(辗转相除法,指数法)
按位与: &, 位与位进行合并: 如果都为1结果为1,否则为0
按位或:|, 两个有一个为1就为1,否则为0
按位异或: ^, 两个位相同为0,不相同为1
按位取反: ~,对一个位进行运算: 如果是0变成1,1变成0
按位右移:>>, 向右移动指定的位数,将所有位向右边移动指定位数, 右边移出的就丢失,左边补符号位
按位右移操作称之为除2操作(向下取整)
按位左移:<<,向左移动指定位数, 左边移出就没了,但是右边的补0
按位左移操作称之为乘2操作
计算机码规则: 计算机中有三种二进制码
原码: 十进制的数转换成的二进制码(原码)
反码: 反码就是在原码的基础上取反(符号位不变)
补码: 反码的基础上+1操作
正数的原码,反码和补码都是一样,负数在计算机中存的结果一定是补码(码的由来是为了解决0和-0的问题)
晕了没!这东西我也不太懂,但还是给你们了解一下想搞懂这些东西要知道二进制的一些基本原理不过放心这东西很好用可以这样说知道现在我还没发现它的用处
代码执行结构
代码执行结构分为三种: 顺序结构,分支结构和循环结构
顺序结构: 代码从上往下逐行执行(默认的结构)
分支结构: 可能存在多个选择,但是用于智能执行其中部分
循环结构: 某段代码重复执行
分支结构
分支结构: 可能有多种情况,每种情况下的都有一些代码需要执行(每种情况又不一样),需要通过某些特定的条件的验证,来选择性的执行其中某段代码.
PHP中分支结构分为两种: if分支和switch分支
If分支
通过if语句来进行条件验证的一种分支结构。
最简if分支: 如果条件成立执行,如果条件不成立不执行
If(条件表达式){
//条件成立要执行的代码块
}
标准if: 不管怎么样都会执行一段代码
If(条件表达式){
//满足条件要执行代码
}else{
//不满足条件要执行的代码
}
复杂if: 条件有多个,但是最终永远只能执行满足其中一个条件的代码
If(条件表达式1){
//满足条件1的代码
}elseif(条件表达式2){
//不满足条件1但是满足条件2的要执行的代码
}else if(条件表达式3){
//不满足条件1和条件2但是满足条件3要执行的代码
}[else{
//有else代表if一定会执行
//没有else代表if有可能所有条件都不满足不执行
}]
Elseif和else if的区别(逻辑上),结果没有区别
如果想要使用简化的if条件: 下面的条件依赖上面的条件,必须保证条件代码是顺序变化
如果if满足条件的要执行的代码只有一条: 那么可以省略大括号
总结:一般是用来进行判读,if(判读语句){判断之后想要做的事情}elseif(判断语句){判断之后想要做的事情}后面还可以无限的加,注意要灵活的用if语句以后做项目会带来很大好处个人总结就是:如果是对的往坏的方面想,如果坏的往好的方面想。然后做比较看哪个更好。
Switch分支
Switch分支也是针对某个条件进行判断: 针对固定值进行(不会使用比较),只有想等比较
Switch(条件变量){
Case 值; //如果值与条件变量相等就匹配
//满足条件所有执行的代码
Break; //结束当前分支
Case 值2: //如果值2与条件变量相等(循环匹配条件)
//满足值2所执行的代码
Break;
Default: //类似if中的else
//要执行代码
Break;
}
注意:条件变量只能是一个固定值,这样理解:不能说大于3,只是‘小明’或者3这些固定的值,不能模糊
Switch实现扔骰子返回大小
骰子可能出现的值是1~6
总结和if语句差不多只是换了一种方式
循环结构
循环也称之为迭代(iterate)
循环结构: 有段代码需要重复执行指定的次数
PHP中,循环结构分为四种: for循环,while循环,do-while循环和foreach循环.
Foreach循环
Foreach循环是PHP中特有的一种循环,专门针对是数组.
For循环
For循环是一种: 将所有的内容都在循环内部控制的一种循环
For循环基本语法
For(初始化条件表达式 ; 边界条件判断表达式 ; 循环变量控制表达式){
//循环体: 多行要执行的代码组成
}
For循环变化: 任何一个条件都可以不存在
For循环中: 任何一个语句表达式中可以有多条语句,使用”,”分开
For循环的条件表更可以放到循环体内
While循环
While循环: 是一种必需在外部定义初始化条件的循环,需要在循环的内部控制循环条件的变更.
While(条件表达式){
//循环体
//变更循环条件
}
Do-while循环
Do-while循环与while循环很类似: do-while循环一定会执行一次(至少)循环体: 先执行后判断条件.
Do{
//循环体
//循环条件变更
}while(条件判断表达式); //必须要使用语句结束符
Do-while与while的区别
循环语句是好东西一定要学会
简单分解一下这些语句
For($a=0;$a<10;$a++循环条件){
$a=$a+1;//循环体
}
先执行$a=0,->然后$a(0)<10,成立,->跳到$a=$a(0)+1;右边的$a=0,左边$a=1
->跳到$a++此时$a自增1变成$a=2 ->跳到$a(2)<10 ->跳到$a(3)=$a(2)+1
->这样一直重复执行直到$a(9)=$a(8)+1 ->跳到$a++ 此时$a=10 ->跳到$a(10)<10不成立程序结束运行
For和foreach一个原理只是用在的地方不同foreach一般用在数组,for不能用在数组
While 和do-while的用法都一样只是格式不同
Do-while与while的区别:do-while会运行先一次。因为它的循环体在上面,循环条件在下面,程序是从上往下执行的,一般我们都是使用while,do-while很少使用不过还是尽量掌握好两种用法
模板标签
PHP代码是嵌入到
在混搭的过程中: 有点破坏HTML结构,HTML是一种标记语言(开始和结束): PHP定义了一套模板标签,专门用于PHP在HTML中嵌入.
模板标签: 使用某些特殊符号代替原有的大括号
做大括号: 使用冒号”:” 代替
右大括号: 使用end + 标签本身代替 + 分号
模板标签有以下几种
If(){} ====> if(): endif;
For(){} =====> for(): endfor;
While(){} ======> while(): endwhile;
Foreach(){} =====> foreach(): endforeach;
换种写法
函数
- 什么是函数?
函数是一种结构(不会自动执行), 是一种将有可能需要多次执行的代码进行一次封装(包裹),在需要使用的地方,可以通过函数名进行调用, 实现代码的复用(重复利用)
函数意义
实现代码的重复利用
用函数来解决问题的这种思想: 模块化编程思想 ---->升华(面向过程编程)
定义函数
函数有几个要素: 关键字(function), 函数名, 参数(形参和实参), 函数体(代码块)和返回值(返回结果)
定义语法
Function 函数名([形参列表,使用逗号分隔]){
//函数体
//返回值return
}
最简函数: 只有函数名,函数体为空,没有参数
复杂函数: 有函数名,有参数,有函数体,有返回值
使用函数
使用函数名()就可以直接调用一个已经存在的函数.
注意: 调用函数时,如果函数定义的时候有参数,那么调用的时候就必须传入对应的数据.
函数名
函数名的命名规则
- 由字母,下划线和数字组成,其中数字不能开始
- 函数名字有可能很长,那么可以使用两种方式来描述
a) 下划线法: 多个单词使用下划线连接
b) 驼峰法: 每个单词的首字母大写(通常第一个小写)
- 函数不能定义同名的: 名字必须唯一(不能与自己的相同,也不能与系统的相同)
函数命名规则和变量一样一句话:假如别人命名起的好你就找的快,假如别人坑死你命名起的不好找的你欲哭无泪
参数
参数分为两种: 形参和实参
形参: 形式参数,是指函数在定义的时候,所用的变量
实参: 实际参数,是指函数在调用的时候,所使用的数据
函数内部工作的一定是形参: 在定义的时候根本不知道实参是什么,只能用形参
形参: 就是用来接收外部数据, 给函数内部使用
工作原理: 在调用函数的时候,先把实参传递给形参
如果一旦定义了形参,那么在函数调用的时候,就必须传入实参
但是: 实参可以比形参多,不能少—实参函数外面的数据;形参用来接收外面的数据相当于一个中转站
参数传值
只要函数定义了形参,那么在调用的时候就需要传入实参: 实参实际上是赋值给形参
参数传值分为两种: 值传递(默认的)和引用传递
值传递: 将数据复制一份,传递给形参: 两个变量两个值—相当于操作两个不同的东西
引用传递: 将实参变量的内存地址赋值给形参: 两个变量指向同一块内存地址: 必须在定义函数的时候,给形参使用地址符号(&)—相当于操作同一样东西
引用传值: 只有变量可以传值
标准使用
这个知识点是重点自己一定多找资料学习
函数内存原理
尽量看懂会对你有帮助的
模拟内存:不是真实内存分布
在计算机中: 内存是RAM, 可以重复读写,效率很高.
内存在实际应用中分为多个区域: 堆,栈,代码段和数据段
堆: 拥有很大的内存,而且内存地址很连续, 效率最低
栈: 是程序唯一能操作的内存,效率特别高, 但是最小
代码段: 装载代码的地方(任何程序的执行都是将代码加载到内存)
数据段: 存放数据的位置, 分为两个区(全局区,静态区)