php小结
//函数定义常量:define
define(“PI”,3.14);
//使用const关键字
const PII = 3;
特殊常量:双下划线开始+常量名+双下划线结束,称为魔术常量,魔术常量的值通常会跟着环境变化,但是不能改变
__ DIR__:当前被执行脚本所在电脑的绝对路径
__ FILE__:当前被执行脚本所在电脑的绝对路径(带自己文件的名字)
__ LINE__:当前所属的行数
__ NAMESPACE__:当前所属的命名空间
__ CLASS__:当前所属的类
__ METHOD__:当前所属的方法
//自动转换
echo $a + $b;
强制转换
echo (float)$ a,(float)$b;
类型判断
var_dump(is_int($ a));
var_dump(is_string($ a));
数据判断
empty():判断数据的值是否为空 isset():判断变量本身是否存在
$c1 = 1;
$ c3 = ‘’;
var_dump(empty($ c1),isset($ c1));
var_dump(empty($ c3),isset($ c3));
//三目运算符(分支结构) a?b:c 如果a成立,那么执行b,否则执行c
//如果表达式复杂,用括号包起来;b、c都可以是另外一个三目运算
$a = 10;
$b = $a > 10 ? 100 : 0;
echo $b;
//自操作运算符
$a =1, $b = 1;
$ a++;++$b;
echo $ a,$b; //独立运算
//替代语法 {用:替代 }用end+对应的起始标记替代
//例: if(){}; -> if(): endif;
//可以使用替代语法的:if switch for while foreach
文件包含四种形式
在PHP中文件的包含有四种形式(两种大形式)
Include:包含文件
Include_once:系统会自动判断文件包含过程中,是否已经包含过(一个文件最多被包含一次)
Require:与include相同
Require_once:以include_once相同
Include和require区别
Include和include_once的区别: Include系统会碰到一次,执行一次;如果对统一个文件进行多次加载,那么系统会执行多次;
Include_once:系统碰到多次,也只会执行一次。
Require和include的区别:本质都是包含文件,唯一的区别在于包含不到文件的时候,报错的形式不一样
Include的错误级别比较轻:不会阻止代码执行 Require要求较高:如果包含出错代码不再执行(require后面的代码)
函数定义语法
Function 函数名([参数]){
//函数体
//返回值:return 结果; }
函数的调用特点:只要系统在内存中能够找到对应的函数,就可以执行(函数的调用可以在函数定义之前)
函数在定义的时候,对应的b形参采用的是取地址,a形参是取值,所以b改变了自己也改变了外部
全局变量不能在局部空间内使用
局部变量也不能在全局内访问
使用超全局变量则可以不受全局变量和局部变量的限制
echo $GLOBALS[‘全局变量’];
运用另外一种定义方法也可以实现局部访问全局变量:
Global关键字:是一种在函数里面定义变量的一种方式
1、 如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量);
2、 如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量
static:静态变量
静态变量的原理:系统在进行编译的时候就会对static这一行为初始变量赋值,在函数调用的时候会自动跳过static这一行,所以$count++可以一直执行递增
静态变量的使用:
1.为了统计当前函数被调用的次数
2.为了统筹函数多次调用得到的不同结果(递归思想)
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。
将一个用户定于的函数传入另外一个函数去使用的过程,称之为回调过程,被传入的函数称之为回调函数
变量保存匿名函数,本质得到的是一个对象(Closure)
closure:闭包。函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
引号方式:比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串 如果有结构要求,或者内容超过一行,可以使用以下两种结构定义
nowdoc字符串:没有单引号的单引号字符串 heredoc字符串:没有双引号的双引号字符串
在PHP中系统常用的转义符号:
\’:在单引号字符串中显示单引号
\”:在双引号字符串中显示双引号
\r:代表回车(理论上是回到当前行的首位置)
\n:代表新一行
\t:类似tab键,输出4个空格
$:在PHP中使用$符号作为变量符号,因此需要特定识别
单引号和双引号的区别: 1、 其中单引号中能够识别\’,而双引号中就不能识别\’
2、 双引号中因为能够识别$符号,所以双引号中可以解析变量,而单引号不可以
双引号中变量识别的规则
1)变量本身系统能够与后面的内容区分:应该保证变量的独立性,不要让系统难以区分2)使用变量专业标识符(区分),给变量加上一组大括号{}
结构化定义字符串变量的规则:
1、 结构化定义字符串对应的边界符有条件:
1.1 上边界符后面不能跟任何内容;
1.2 下边界符必须顶格:最左边;
1.3 下边界同样后面只能跟分号,不能跟任何内容;
2、 结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身
基本函数strlen():得到字符串的长度(字节为单位)
中文字符串在utf-8一个汉字占3个字节
多字节字符串的长度问题:包含中文的长度
多字节字符串扩展模块:mbstring扩展(mb:Multi Bytes)
Mbstring扩展针对的是一些关于字符统计:strlen只是针对标准交换码ASCII,mtstring会针对不同的字符集
1)转换函数:implode(), explode(), str_split()
Implode(连接方式,数组):将数组中的元素按照某个规则连接成一个字符串
Explode(分割字符,目标字符串):将字符串按照某个格式进行分割,变成数组
Str_split(字符串,字符长度):按照指定长度拆分字符串得到数组
2)截取函数:trim(), ltrim(), rtrim()
Trim(字符串[,指定字符]):本身默认是用来去除字符串两边的空格(中间不行),但是也可以指定要去除的内容,是按照指定的内容循环去除两边有的内容:直到碰到一个不是目标字符为止
Ltrim():去除左边的
Rtrim():去除右边的
3)截取函数:substr(), strstr()
Substr(字符串,起始位置从0开始[,长度]):指定位置开始截取字符串,可以截取指定长度(不指定到最后)
Strstr(字符串,匹配字符):从指定位置开始,截取到最后(可以用来去文件后缀名)
4)大小转换函数:strtolower(), strtoupper(), ucfirst()
Strtolower:全部小写
Strtoupper:全部大写
Ucfirst:首字母大写
5)查找函数:strpos(), strrpos()
Strpos(字符串,匹配字符):判断字符在目标字符串中出现的位置(首次)
Strrpos(字符串,匹配字符):判断字符在目标字符串中最后出现的位置
6)替换函数:str_replace()
Str_replace(匹配目标,替换的内容,字符串本身):将目标字符串中部分字符串进行替换
7)格式化函数:printf(), sprintf()
Printf/sprintf(输出字符串有占位符,顺序占位内容…):格式化输出数据
8)其他:str_repeat(), str_shuffle()
Str_repeat():重复某个字符串N次
Str_shuffle():随机打乱字符串
在PHP中系统提供多种定义数组的方式:
1、 使用array关键字:最常用的 $变量 = array(元素1,元素2,元素3…);
2、 可以使用中括号来包裹数据: $变量 = [元素1,元素2…];
3、 隐形定义数组:给变量增加一个中括号,系统自动变成数组
$变量[] = 值1; //如果不提供下标也可以,系统自动生成(数字:从0开始)
$变量[下标] = 值; //中括号里面的内容称之为下标key,该下标可以是字母(单词)或者数字,与变量命名的规则相似
PHP数组特点
1) 可以整数下标或者字符串下标 如果数组下标都为整数:索引数组 如果数组下标都为字符串:关联数组
2) 不同下标可以混合存在:混合数组
3) 数组元素的顺序以放入顺序为准,跟下标无关
4) 数字下标的自增长特性:从0开始自动增长,如果中间手动出现较大的,那么后面的自增长元素从最大的值+1开始
5) PHP中数组元素没有类型限制
6) PHP中数组元素没有长度限制
补充:PHP中的数组是很大的数据,所以存储位置是堆区,为当前数组分配一块连续的内存。
特殊下标的转换:
[false]:[1],[true]:[0],[NULL]:[""]
二维数组:数组中所有的元素都是一维数组
多维数组 在第二维的数组元素中可以继续是数组,在PHP中没有维度限制(PHP本质并没有二维数组)
但是,不建议使用超过三维以上的数组,会增加访问的复杂度,降低访问效率。 异形数组(不规则数组)
异形数组:数组中的元素不规则,有普通基本变量也有数组。 在实际开发中,并不常用,尽量让数组元素规则化(便于进行访问)
Foreach遍历
如果是关联数组(字母下标),就需要下标,如果是数字下标就直接访问值
获取下标
在进行数据存储定义的时候,通常二维数组不会两个维度的key下标都为数字,一般是一维为数字(无意义),二维为字符串(数据库表字段),所以在进行遍历的时候,通常是只需要针对一维进行遍历,取得二维数组元素,然后二维数组元素通过下标去访问。
Foreach遍历的原理:本质是数组的内部有一颗指针,默认是指向数组元素的第一个元素,foreach就是利用指针去获取数据,同时移动指针。
Foreach($arr as $k => $v){ //循环体 }
1、 foreach会重置指针:让指针指向第一个元素;
2、 进入foreach循环:通过指针取得当前第一个元素,然后将下标取出放到对应的下标变量$k中(如果存在),将值取出来放到对应的值变量 $v中;(指针下移)
3、 进入到循环内部(循环体),开始执行; 4、 重复2和3,直到在2的时候遇到指针取不到内容(指针指向数组最后)
For循环遍历数组 For循环:基于已知边界条件(起始和结束)然后有条件的变化(规律) 因此:for循环遍历数组有对应条件
1、 获取数组长度:count(数组)得到数组元素的长度 2、 要求数组元素的下标是规律的数字
While配合each和list遍历数组 While是在外部定义边界条件,如果要实现可以和for循环一样。
Each函数使用:each能够从一个数组中获取当前数组指针所指向的元素的下标和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以一个四个元素的数组返回:
0下标 – 》 取得元素的下标值 1下标 - 》 取得元素的值 Key下标 – 》取得元素的下标值 Value下标 – 》取得元素的值
如果each取不到结果(数组指针移动到最后),返回false
List函数使用:list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量当中(批量为变量赋值:值来源于数组):list必须从索引数组中去获取数据,而且必须从0开始。
错误:
正确:
List与each配合特别好:each一定有两个元素就是0和1下标元素 List(变量1,变量2) =
each(数组);
是一种赋值运算,但是可以得到false结果(each取不到正确的结果),整个表达式为false
1)排序函数:对数组元素进行排序,都是按照ASCII码进行比较,可以进行英文比较 sort():顺序排序(下标重排)
rsort():逆序排序
asort():顺序排序(下标保留)
arsort():逆序排序
ksort():顺序排序:按照键名(下标)
krsort():逆序排序
shuffle():随机打乱数组元素,数组下标会重排
2)指针函数
reset():重置指针,将数组指针回到首位
end():重置指针,将数组指针指到最后一个元素
next():指针下移,取得下一个元素的值
prev():指针上移,取得上一个元素的值
current():获取当前指针对应的元素值
key():获取当前指针对应的下标值
注意事项:next和prev会移动指针,有可能导致指针移动到最前或者最后(离开数组),导致数组不能使用,通过next和prev不能回到真确的指针位置。只能通过end或者reset进行指针重置
3)其他函数
count():统计数组中元素的数量
array_push():往数组中加入一个元素(数组后面)
array_pop():从数组中取出一个元素(数组后面)
array_shift():从数组中取出一个元素(数组前面)
array_unshift():从数组中加入一个元素(数组前面)
PHP模拟数据结构: 栈:压栈,先进去后出来(FILO)
队列:排队,先进去的先出去(FIFO)
array_reverse():数组元素反过来
in_array():判断一个元素在数组中是否存在
array_keys():获取一个数组的所有下标,返回一个索引数组
array_values():获取一个数组的所有值,返回一个索引数组
php小结的更多相关文章
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
- 梯度提升树(GBDT)原理小结
在集成学习之Adaboost算法原理小结中,我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting De ...
随机推荐
- 一篇文章图文并茂地带你轻松学会 HTML5 storage
html5 storage api localStorage 和 sessionStorage 是 html5 新增的用来存储数据的对象,他们让我们可以以键值对的形式存储信息. 为什么要有 stora ...
- python了解未知函数的方法
?func 如图:
- Codeforces13C–Sequence (区间DP)
题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少? 题解 一个很显然的结果就是,变化后的每一个值肯定是等于原来序列的某个值,因为 ...
- TensorFlow+restore读取模型
# 注意和前一或二篇Lenet训练并验证的文章从`y_conv = tf.nn.softmax(fc2)`起的不同 # 部分函数请参照前后2篇文章 import tensorflow as tf im ...
- cocos2d-x & cocos2d-js
cocos2d-x & cocos2d-js cocos2d-x new https://github.com/cocos2d/cocos2d-x cocos2d-x is a multi-p ...
- yarn global add !== yarn add global
yarn global add !== yarn add global yarn does not exist the --global flag, but exits yarn global com ...
- webpack 4 & dev server
webpack 4 & dev server proxy https://webpack.js.org/configuration/dev-server/#devserverproxy htt ...
- HOC in Depth
HOC in Depth Higher-Order Components https://reactjs.org/docs/higher-order-components.html 1. wrappe ...
- ESLint error level
ESLint error level https://eslint.org/docs/user-guide/getting-started#configuration .eslintrc { &quo ...
- flutter 使用Android studio编辑kt插件
使用android studio打开/example/android 文件即可