Hexo

  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Schedule

PHP基础07-字符串

Posted on 2019-01-29 | Edited on 2019-01-30 | In PHP基础

字符串

字符串定义语法

  1. 单引号字符串
  2. 双引号字符串


    比较适合定义那些比较短(不超过一行)或者没有结构要求的字符串,
    如果有结构要求或者内容超过一行,可以使用以下两种结构定义
  3. nowdoc字符串:没有单引号的单引号字符串
    $str=<<<’边界符’
    字符串内容
    边界符
  4. heredoc字符串:没有双引号的双引号字符串
    $str=<<<边界符
    字符串内容
    边界符



结构不会发生变化

结构化定义字符串变量的规则

  • 结构化定义字符串对应的边界符有条件:
  1. 上边界符后面不能有任何内容(包括注释,空格)
  2. 下边界符必须顶格:最左边
  3. 下边界符同样后面只能跟分号,不能跟任何内容
  • 结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身

字符串转义

转义的含义:在计算机通用协议中,有一些特定的方式定义的字母,系统会特定处理;通常这种方式都是使用反斜杠+字母(单词)的特性
\r \n:回车换行
PHP在识别转义字符的时候也是使用同样的模式:反斜杠+字母
在PHP中系统常用的转义符号
\’ 在单引号字符串中显示单引号
\”在双引号字符串中显示双引号
\r代表回车(理论上回到当前行的首位置)
\n代表新一行 (\r与\n配合就可以表示换行)
\t 类似TAB键,输出四个空格
\$ 在PHP中使用$符号作为变量符号,因此需要特定识别
单引号与双引号区别:

  1. 单引号中能识别\‘(因为在单引号中出现没有转义的’会有误解,发生错误),而双引号仅不能识别\’(因为在双引号中‘能正确使用不会有误解)

    因为单引号中$没有变量意义,所以/$ 原样输出

    因为双引号中$有变量意义,所以能识别/$转义成没有意义的$输出


  2. 双引号中因为能够识别$符号,所以双引号中可以解析变量,而单引号不可以。(故)

双引号中变量识别的规则

  1. 变量本身能与后面的内容区分:应该保证变量的独立性,不要让系统难以区分,给变量加上一组大括号
  2. 使用变量专业标识符(区分)

字符串转义

字符串长度问题

  1. 基本函数strlen():得到字符串的长度(字节为单位)
  2. 多字节字符串的长度问题:包含中文的长度
  3. 多字节字符串扩展模块:mbstring扩展(mb:Multi Byte)
    首先需要加载PHP的mbstring扩展

可以使用mb扩展带来很多函数
mb_string扩展针对的是一些关于字符统计


strlen()只是针对标准交换码ASCII,mbstring针对不同的字符集

字符串相关函数

转化函数:implode(),explode(),str_split

implode(连接方式,数组)将数组中的元素按照某个规则连接成一个字符串
explode(分割字符,目标字符串)将字符串按照某个格式进行分割,变成数组
str_split(字符串,字符长度):按照指定长度拆分字符串得到数组

截取函数 trim(),ltrim(),rtrim()

trim(str,【去除的内容】)本身默认去除两边的空格(中间不行),但是也可以指定要去除的内容,是按指定的内容循环去除两边的内容,碰到一个不是目标字符为止
ltrim() 去除左边的 rtrim()去除右边的

截取函数

substr(字符串,起始位置从0开始,【长度】):指定位置开始截取字符串,可以截取指定长度(不指定表示到最后)
strstr(字符串,匹配字符):从指定字符开始截取,到最后(strrchr() - 查找指定字符在字符串中的最后一次出现,可以用来取文件后缀名:利用.)

该函数区分大小写。如果想要不区分大小写,请使用 stristr()

大小转换函数

strtolower — 将字符串转化为小写
strtoupper 将字符串转化为大写
Ucfirst()首字母大写

ucwords() - 将字符串中每个单词的首字母转换为大写

查找函数

strpos(字符串,指定字符,起始位置)查找首次出现的位置

  • 起始位置如果是负数,搜索会从字符串结尾指定字符数开始。
  • 同时注意字符串位置是从0开始,而不是从1开始的。 如果没找到 needle,将返回 FALSE。

替换函数

str_replace(匹配目标,替换的内容,字符串):将目标字符串中部分字符串进行替换
str_ireplace — str_replace() 的忽略大小写版本

格式化函数

printf() / sprintf(输出字符串有占位符,若干占位符)

其他

str_repeat(字符串,次数)
重复一个字符串(必须大于等于 0。如果 multiplier 被设置为 0,函数返回空字符串)
str_shuffle()随机打乱字符串

PHP基础06-错误处理相关(简)

Posted on 2019-01-29 | In PHP基础

错误处理

错误处理:指的是系统(用户)在对某些错误代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员

错误分类

  1. 语法错误:用户书写的代码不复合PHP规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行(parse error)
  2. 运行时错误:代码编译通过,但是代码在执行的过程中会出现一些条件不满足导致的错误(runtime error)
  3. 逻辑错误:程序员在写代码的时候不够规范,出现了一些逻辑性的错误,导致代码正常执行,但是得不到想要的结果

错误代号

所有看到的错误代码在PHP中都定义成了系统 常量(可以直接使用)
1.系统错误
E_PARSE:编译错误,代码不会执行
E_ERROR:fatal error,致命错误,会导致代码不能正确继续执行(出错的位置断掉)
E_WARNING:warning,警告错误,不会影响代码执行,但是可能得到意想不到的结果
E_NOTIE:notice,通知错误,不会影响代码执行
2.用户错误:
E_USER_ERROR ,E_USER_WARNING,E_USER_NOTICE
用户在使用自定义错误触发的时候,会使用到的错误代号(系统不会用到)

  1. 其他:E_ALL,代表着所有错误(通常在进行错误控制的时候用比较多,)建议在开发过程中(开发环境)使用
    所有E开头的错误常量(代号)其实都是由一个字节存储,然后每一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算进行操作
    排除通知级别notice:E_ALL&~E_NOTICE
    只要警告和通知: E_WARNING|E_NOTICE

错误触发

程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,输出给用户:主要针对代码的语法错误和运行时错误
人为触发:知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示。trigger_error(错误提示):
可以通过第二个参数进行严格性控制 (是否在往下运行)


错误显示设置:哪些错误该显示,以及该如何显示

在PHP中,有两种方式来设置当前脚本的错误处理
1.在PHP配置文件:全局配置:php.ini文件
display_errors:是否显示错误
error_reporting:显示什么级别的错误
2可以在运行的PHP脚本中设置(在脚本中定义的配置级别比配置文件高,通常在开发中都会在代码中去进行控制和配置)
error_reporting()设置对应的错误显示级别
ini_set(‘配置文件中的配置项’,配置值)
ini_set(‘error_reporting’,E_ALL);
ini_set(‘display_errors’,1);

错误日志设置

在实际生产环境中,不会直接让错误赤裸裸的展示给用户

  1. 不友好
  2. 不安全:错误会暴露网站很多信息(路劲,文件名)

所以生产环境中,一般不显示错误(错误也比较少),但是不可能避免会出现错误(测试的时候不会发现所有的问题)这个时候不希望看到,但是又希望捕捉到可以让后台程序员去修改:需要保存到日志文件中,需要在PHP配置文件中或者代码中(ini_set)设置对应的error_logo

  1. 开启日志功能
  2. 指定路径

    自定义错误处理

    最简单的错误处理:trigger_error()但是该函数不会阻止系统报错
    php系统提供了一种用户处理错误的机制:用户自定义错误处理函数,然后将该函数增加到系统错误处理的句柄中,然后系统会在碰到错误之后,使用用户定义的错误函数。
  3. 如何将用户定义的函数放到系统中?set_error_handler()
  4. 自定义错误处理函数,系统有要求

代码实现:

  1. 自定义错误函数,注意参数

    2.注册自定义函数,修改错误处理机制

PHP基础05-函数

Posted on 2019-01-29 | In PHP基础

函数的基本概念

函数:function,是一种语法结构,将实现某一种功能的代码块(多行代码)分装到一个结构中,从而实现代码的重复利用(复用)

函数定义语法

函数有几个对应的关键点:function关键字、函数值、参数(形参和实参),函数体和返回值
基本语法如下:
function 函数名(参数){
//函数体
//返回值:return结果
}
定义函数的目的:是为了实现代码的重复利用,一个功能一个函数

函数的使用:

通过访问函数的名字+()
//如果函数在定义的过程中有参数,那么在调用的时候必须传入对应的参数

函数调用

函数是一种结构不会自动执行,只有调用才会执行
函数是在代码执行阶段,碰到函数名字的时候才会调用,不是在编译阶段
函数调用的特点:只要系统在内存中能够找到对应的函数,就可以执行()函数的调用可以在函数定义之前

函数执行的内存分析

  1. 读取代码进入代码段(编译:将代码编译字节码存储到内存)
  2. 根据代码逐行执行,(上图代码中先调用函数再执行不会报错:调用的时候已经能在内存中找到这个函数)

以上原因:编译和执行是分开的(先编译后执行)

函数命名规范

命名规范:由字母、数字、下划线组成,但是不能以数字开头
函数作为一种常用的结构,一般遵循以下规则:函数通常名字代表着函数的功能,而有些功能会比较复杂,可能一个单词不足以表示,需要多个组合

  1. 驼峰法:除了左边第一个单词外,后面所有的单词首字母大写:showParentInfo()
  2. 下划线法:单词之间通过下划线连接,单词都是小写show_parent_info()

函数名字:在一个脚本周期中,不允许出现同名函数(通常在一个系统不会使用同名函数)

参数详解

函数的参数分为两种:形参和实参

形参

形式参数,不具有实际意义的参数,是在函数定义时使用的参数

实参

实际参数,具有实际数据意义的参数,是在函数调用的时候使用的参数
形参是实参的载体,实参在调用时通常是需要传入到函数内部参与计算(运算),那么需要在函数内部去找到实际数据所在的位置,才能找到数据本身:需要实际调用的时候,将数据与实参形式传递给形参,给形参赋值,从而使得函数内部可以用到外部数据

注意:
1.在PHP中允许实参多于形参(个数)函数内部不用而已,不会报错
2.在PHP中理论上形参个数没有限制(实际开发不会太多)
3.实参不能少于形参

默认值

默认值:defeat value,指的是形参的默认值,在函数定义的时候,就给形参进行一个初始赋值:如果实际调用传入的参数(实参)没有提供,那么形参的值就使用初始赋值来进入函数内部参与运算

注意是值传递,num1的值不变

通常默认值是用在一些,一定会有某个数据参与,但是可能是某个我们知道的值
注意事项:
1.默认值的定义是放在最后的(多个),不能左边形参有默认值但是右边没有
2.函数外部定义的变量名字与函数定义的形参名字冲突(同名)是没有任何关联关系的
3.如果多个函数使用同样的形参名字也不冲突

参数传递

  1. 值传递
    实参在调用时会将值赋值给形参,那么实际上使用的方式是简单的值传递,将实参(数据或者变量或者常量或者其他表达式)的结果(值)取出赋值给形参:形参与外部实际传入的参数本身没有任何关联关系
  2. 引用传递
    有的时候,希望在函数内部拿到的外部数据,能在函数内部改变,函数才会在调用的时候去主动获取外部数据的内存地址。以上这种定义形式参数的方式叫做引用传值
    基本定义语法
    function函数名(形参1,&形参2){
    //函数名
    
    }
    在调用的时候,必须给引用传值的参数位置传入实际参数,而且参数本身必须是变量。(变量才有指向的数据的内存地址)




对比发现$num1使用的是值传递(在函数调用后本身的值没有变化,只是在函数内部发生) $num2用了取地址,是引用传递,函数内部的参数取到了$num2的地址,函数内部$num2值发生变化,外部也会发生变化


引用传值注意事项:
在传入实参的时候必须传入变量

系统提示
致命错误:只有变量能够引用传递< /center>


函数返回值
PHP中函数都有返回值,默认返回NULL

return关键字:

  1. return在函数内部存在的价值:返回当前函数的结果,当前函数运行结束
  2. 函数还可以在文件中直接使用(不在函数里面):代表文件将结果return后面跟的内容,转交给包含当前文件的位置,并终止后面的代码(通常在系统配置文件中使用较多)

作用域

作用域:变量(常量)能够被访问的区域

  1. 变量可以在普通代码中定义
  2. 变量也可以在函数内部定义
    在php中作用域严格来说分为两种;但是PHP内部划定一一些在严格意义之外的一种,所有总共算3种
  3. 全局变量:就是用户普通定义的变量(函数外部定义)
    所全局空间:在PHP中只允许在全局空间使用:理论上函数内部不可访问
    脚本周期:直到脚本运行结束(最后一行代码)
  4. 局部变量:就是在函数内部定义的变量
    所属当前函数空间:在PHP中只允许在当前函数自己内部使用
    函数周期:函数执行结束(函数是在栈区中开辟独立内存空间运行)
  5. 超全局变量:系统定义的变量(预定义变量:$_SERVER、$_POST等)
    所超全局空间:没有访问限制(函数内外均可访问)



    让局部访问全局(一般不使用)的办法

    如果想函数内部是使用外部变量,除了$GLOBALS之外,通过参数传值(如果要统一值,还可以使用引用传值)

在PHP中还有一种方式,能够实现全局访问局部,同时局部也可以访问全局:global关键字

global关键字:

是一种在函数里面定义变量的一种方式

  1. 如果使用global定义的变量名在外部存在(全局变量),那么系统在函数内部定义的变量直接指向外部全局变量所指向的内存空间(同一个变量)
  2. 如果使用global定义的变量名在外部不存在(全局变量),系统会自动在全局空间(外部)定义一个与局部变量同名的全局变量

    本质的形式:在函数的内部和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。


    基本语法
    global 变量名;//不能赋值
    变量名=值 //修改
    虽然以上方式可以实现局部与全局的互访,但是通常不会这么用。一般如果会存在特殊使用,也会使用参数的形式来访问。(还可以使用常量:define定义的)

静态变量

静态变量:static,是在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享数据的变量:函数运行结束后所有的局部变量会清空,如果重新运行一下函数,所有的局部变量又会重新初始化
function 函数名()
{
static $变量名=值 //通常会在定义的时候就赋值
}
静态变量的作用是为了跨函数共享数据(同一个函数被多次调用)



静态变量的使用

  1. 为了统计:当前函数被调用的次数(有没有替换方法)
  2. 为了统筹函数多次调用得到的不同结果(递归思想)

可变函数

可变函数:当前有一个变量所保存的值,刚好是一个函数的名字你,那么就可以使用变量+()来充当函数名使用


定义:
$变量 = ‘display’
function display(){
}
可变函数在系统使用的过程中还是比较多的,尤其是使用很多系统函数的时候:需要用户在外部定义一个自定义函数,但是是需要传入到系统函数内部使用。

匿名函数

基本概念
匿名函数:没有名字的函数
基本语法:
变量名=function(){
函数体
}



变量保存匿名函数,本质得到的是一个对象(closure)

闭包

闭包closure,一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)
简单理解:函数内部有一些局部变量(要执行的代码块)在执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:通常用匿名函数)

证明:函数的局部变量在函数使用完之后没有被释放?

  1. 使用内部匿名函数
  2. 匿名函数使用局部变量:use
  3. 匿名函数被返回给外部使用

伪类型

伪类型:假类型,实际在PHP中不存在的类型,通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习
伪类型主要有两种:在三大类八小类之外
mixed:混合的,可以是多种PHP中的数据类型
number:数值的,可以是任意数值类型(整形和浮点型)

常用系统函数

有关输出的函数

print:类似于echo输出提供的内容,本质是一种结构(不是函数,)返回1,可以不需要使用括号
print_r:类似于var_dump,但是比var_dump简单,不会输出数据的类型,只会输出值(数组打印比较多)

注意图中的1是print返回的1被echo输出的

有关时间的函数:

1.date ( string $format [, int $timestamp ] )
返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()。
按照指定格式对对应的时间(从1970年格林威治时间开始计算的时间),如果没有指定特定的时间戳,那么就是默认解释当前时间戳
time()获取当前时间对应的时间戳


其中的参数format

2.microtime()获取微妙级别的时间戳mixed microtime ([ bool $get_as_float ] )
microtime() 当前 Unix 时间戳以及微秒数。本函数仅在支持 gettimeofday() 系统调用的操作系统下可用。
如果调用时不带可选参数,本函数以 “msec sec” 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
如果给出了 get_as_float 参数并且其值等价于 TRUE,microtime() 将返回一个浮点数。


3.strtotime():按照规定格式的字符串转换为时间戳(将任何字符串的日期时间描述解析为 Unix 时间戳)

有关数学的函数

max()
min()
rand()得到一个指定区间的随机数(整数)
mt_rand:与rand一眼,只是底层结构不一样,效率比rand高(建议使用)
round()四舍五入
cell()向上取整
floor()
pow():求指定数字的指定制数次结构,例如pow(2,8)=256
abs 求绝对值
sqrt 求平方

有关函数的函数

function_exists()判断指定的函数名字是否在内存中存在(帮助用户不去使用一个不存在的函数,让代码安全性更高)
func_get_arg()在自定义函数中去获取指定数值对应的参数
func_get_args()在自定义函数中去获取所有的参数(数组)
func_num_args():获取当前自定义函数的参数数量

PHP基础04-流程控制

Posted on 2019-01-27 | Edited on 2019-01-28 | In PHP基础

流程控制(由于和别的语法中很多类似,故省略很多相似地方,简写)

控制分类:

1.顺序

2.分支

  • if{}else{} if{}elseif{}lese{}
  • switch有一组情形存在:通过一个条件通常由多个值,但是每一个值都会有对应不同的代码要执行
    1.条件一定时一个具体的值
    2.注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一轮循环,用 continue 2。
    3.case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。

3.循环

  1. for循环 通过条件、起始和终止判断执行
  2. while循环 通过判断条件终止
  3. do-while 跟while差不多
  4. foreach:针对数组

循环控制 continue, break

其中内部循环也可以控制到外部循环,就是通过使用层级参数

Contine2 当前自己循环后面内部不再执行,同时外部循环体也不再执行,重新来过。
Break2 当前自己循环结束,同时外部也结束(如果还有外部不受影响)

程控制替代语法

流程控制普代语法:分支和循环的替代语法
{使用:替代
}使用end+对应的其他标记替代
如if(){}替代为 if():end if

PHP基础03-运算符

Posted on 2019-01-27 | In PHP基础

运算符:十种

赋值运算:(从右往左运算)

表示将右边的结果(可以是变量,数据,常量,其他运算出来的结果)保存到内存的某个位置,然后将位置的内存地址赋值给左侧的变量(常量)

算术运算符

+相加
-减
*乘
/ 表示两个数相除
%取余(模)运算,两个数相除(整数),保留余数
注意用到除法时,除数不能为0

比较运算符

如同它们名称所暗示的,允许对两个值进行比较。还可以参考 PHP 类型比较表看不同类型相互比较的例子。
比较运算符
例子 名称 结果
$a == $b 等于 TRUE,如果类型转换后 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。
$a != $b 不等 TRUE,如果类型转换后 $a 不等于 $b。
$a <> $b 不等 TRUE,如果类型转换后 $a 不等于 $b。
$a !== $b 不全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。
$a < $b 小与TRUE,如果 $a 严格小于 $b。
$a > $b 大于TRUE,如果 $a 严格大于 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
$a <=> $b 结合比较运算符 当$a小于、等于、大于than $b时 分别返回一个小于、等于、大于0的integer 值。 PHP7开始提供.
$a ?? $b ?? $c NULL 合并操作符 从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。PHP7开始提供。

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

逻辑运算符

返回true或false
&&逻辑与:左边的条件与右边的条件同时成立(两边结果都为true)
||逻辑或:左边的条件或者右边的条件只要有一个满足即可
!逻辑非 对已有条件去翻,本身为true,取反结果就是false

逻辑与和逻辑或为短路运算:如果由第一个表达式已经可以得出结果,那么就不会运行逻辑运算符后面的表达式

连接运算符:

是PHP中将多个字符串拼接的一种符号
. 将两个字符串连接到一起
.= 复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边变量

错误抑制符

在PHP中有一些错误可以提前预知,但是这些错误可鞥无法避免,但是又希望报错给用户看,可以使用错误抑制符
@:在可能出错的表达式前面使用@符号即可
错误抑制符通常在生产环境(上线)会用到,在开发的时候不会用:系统本身最好没有任何错误

可以看到58行没有报错而57行报错了

三目运算符

三目运算:有三个表达式参与的运算(简单的分支结构缩写)
表达式1?表达式2:表达式3
运算:如果表达式1成立,那么执行表达式2,否则执行表达式3

  • 可以复合运算,通常不用
  • 如果表达式比较复杂用括号包起来

自操作运算符

自己操作自己的运算符: ++ –

  • ++$a 前置:先自操作再把值给别人
  • &a++ 后置:先把值给别人再自操作

    注意到echo $a++ 时输出的a为2
  • 类似的有+=,-=,*=,/=,%=
    注意等号右边的整体性

    位运算符

  • 计算机码 :数值左边一位是符号位

位运算:去除计算机中最小的单位(位bit)进行运算

  • &按位与,两个为1结果为1
  • |按位或 两个有一个1为1
  • ~按位非 取反
  • ^ 按位异或 相同为1不同为1
  • <<按位左移,整个位向左移动以为,右边补0 (乘以2的操作)
  • >> 按位右移 整个位向右移动,左边补符号位 (除以2的操作,不完全正确,例如整数除以2会出现小数)
    注意:
    1.系统进行任何运算的时候都是使用补码
    2.(运算结束后)显示的时候都是原码

    按位与

    按位非

    按位右移

运算符的优先级

多种运算符同时存在的时候,如何结合运算(参见参考手册)

PHP基础02-数据类型

Posted on 2019-01-26 | Edited on 2019-01-27 | In PHP基础

数据类型
在PHP中指的是存储的数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型

三大类八小类:

简单(基本)数据类型:4个小类

整型:int/integer,系统分配4个字节存储,表示整数类型(存的下的话)
浮动型float/double ,系统分配8个字节存储,标识小数或者整形存不下的整数
字符串型:string ,系统根据实际长度分配,表示字符串(引号)
布尔类型bool/boolea,表示布尔类型,只有两个值: true 和 false

复合数据类型:2个小类

对象类型 objet,存放对象(面向对象)
数组类型:array一次性存放多个数据

特殊数据类型:2个小类

资源类型:resource,存放资源数据(PHP外部数据,如数据库,文件)
空类型:NULL,只有一个值就是NULL(不能运算0

整形类型

整数类型:保存整数数值(范围限制),4个字节存储数据,最大就是32位,42亿多,但是在PHP中默认是有符号类型(区分正负数)

在PHP中提供了四种整形的定义方式:十进制定义,二进制定义,八进制,和十六进制定义。 (PHP默认输出为十进制)

$a=120 //十进制
$a=0b110 //二进制
$a=0120 //八进制
$a=0x120 //十六进制

进制转换函数(参考):

string decbin ( int $number )十进制转二进制
string decoct ( int $number )十进制转八进制
string dechex ( int $number )十进制转十六进制
同理反过来也可以使用
number bindec ( string $binary_string )二进制转十进制
string bin2hex ( string $str )二进制准啊十六进制
等等…

浮点类型

浮点型:小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右 (整型超过最大存储值时变成浮点型)

浮点型定义有两种方式

$f=1.23
$f=1.23e10 //其中e表示底数10

浮点数不宜做精确判断:

浮动数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不精确

为何浮点数能表示更大的的数据

布尔类型

两个值true 和false通常用于做判断

类型转换

方式

1自动转换:系统根据需求自己判定,自己转换(用的比较多,效率比较低)
2强制(手动)转换:在变量之前增加一个括号(),在里面写上对应的类型:int/float……其中NULL类型用到unset()
在转换过程中,用的比较多的是转布尔类型(判断)和转数值类型(算术运算)

其他类型转布尔:

true或者false(少)

其他类型转数值:

  1. 布尔true为1,false为0
  2. 字符串转数值的规则
  • 以字母开头的字符串,永远为0
  • 以数字开头的字符串,取到碰到字符串为止
    (不会同时包含两个小数点)

类型判断;

通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型(相同结果为true,不同为false),
是一组以is_开头后面跟类型名字的函数:is_xxx(函数名)
bool类型不能用echo来查看(无法判断true指的是字符串还是布尔类型),可以使用var_dump结构查看 var_dump()

获取以及设定数据(变量)的类型

还有一组函数可以用来获取以及设定数据(变量)的类型
Gettype(变量名):获取类型,得到的是该类型对应的字符串
Settype(变量名,类型):设定数据类型:与强制转换不同

  1. 强制转换:(类型)变量名,是对数据值赋值的内容进行处理(不会处理实际存储的内容)

    可以看到$a实际存储没有改变

  2. Settype会改变实际存储的内容
    如下图可以看到$b的已经被转换成string类型(改变了实际存储的内容)

为空判断

bool empty ( mixed $var )

判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

bool isset ( mixed $var [, mixed $… ] )

检测变量是否设置,并且不是 NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节(”\0”)并不等同于 PHP 的 NULL 常数。

Untitled

Posted on 2019-01-26
markdown

title: markdown
date: 2019-01-26 14:20
categories: markdown


由于第一次写博客,连基本语法都不会所有先摘一篇markdown的基本语法文章,以便日后写文参考
摘自 https://blog.csdn.net/tyyking/article/details/79682157

标题的写法:

前面带#号,后面带文字,分别表示h1-h6,上图可以看出,只到h6,而且h1下面会有一条横线,注意,#号后面有空格

列表(分为无序和有序)

无序

可以看到,无序列表可以用 , + , — 来创建,用在线编辑器看,实际上是转换成了ul>li ,所以使用哪个都可以,推荐使用吧

有序

第一组本来是3 2 1 倒序,但是现实3 4 5 ,后面一组 序号是乱的, 但是还是显示 3 4 5 ,这点必须注意了,如图:


区块引用

引用因为是一个区块,理论上是应该什么内容都可以放,比如说:标题,列表,引用等等,看看下图:

或者可以修改成:

华丽的分割线

分割线可以由* - _(星号,减号,底线)这3个符号的至少3个符号表示,注意至少要3个,且不需要连续,有空格也可以

链接

链接还可以带title属性,好像也只能带title,带不了其他属性,注意,是链接地址后面空一格,然后用引号引起来

图片

图片也有2种方式:行内式和参数式
1.”![我是图片](htpps://…)”
2.”[图片]:htpps://…”
“图在这![图片]”

以上图:



用法跟链接的基本一样,唯一的不同就是,图片前面要写一个!(这是必须的),没什么好说的

代码框

1.单行
如果代码量比较少,只有单行的话,可以用单反引号包起来,如下:

2.多行


多行用三个反引号,如果要写注释,可以在反引号后面写

表格



从这3种不同写法看,表格的格式不一定要对的非常起,但是为了好看,对齐肯定是最好的,第一种的分割线后面的冒号表示对齐方式,写在左边表示左对齐,右边为右对齐,两边都写表示居中,还是有点意思的,不过现实出来的结果是,表格外面并没有线框包起来,不知道别人的怎么弄的

强调



一个星号或者是一个下划线包起来,会转换为倾斜,如果是2个,会转换为加粗

转义


删除线


参考文献:

http://www.appinn.com/markdown/

http://sspai.com/25137

https://www.cnblogs.com/liugang-vip/p/6337580.html

PHP基础01-变量与常量

Posted on 2019-01-26 | In PHP基础

变量

预定义变量

预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义变量是数组)
• $GLOBALS — PHP中可所有的全局变量
• $_SERVER — 服务器和执行环境信息
• $_GET — 获取所有表单以get方式提交的数据
• $_POST — post提交的数据都会保存在此
• $_FILES — 用户上传的文件信息
• $_REQUEST — get和post提交的都会保存
• $_SESSION — session绘画数据
• $_ENV — 环境信息
• $_COOKIE —cookie会话数据

可变变量:

如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值 在变量前面再多一个$符号
例如:$a=’b’ $b=’b’ 则 $$a=’b’

补充:

在内存中,通常有以下几个分区:
栈区:程序可以操作的内存部分(不存数据,运行程序代码),少但是快
代码段:存储程序的内存部分(不执行)
数据段:存储普通数据(全局区和静态区)
堆区:存储复杂数据,大但是效率低

变量传值(值传递):

将一个变量赋值给另外一个变量:变量传值

引用传递

常量:

常量与变量一样:用来保存数据
常量基本概念:
常量:const/constant,是一种在程序运行当中,不可改变的量(数据)
常量一旦定义,通常数据不可改变(用户级别)
在PHP中常量有两种定义方式(5.3之后才有两种)

  1. 使用定义常量的函数:define(‘常量名‘,常量值,【】)
  2. 5.3之后才有的:const常量名=值

    常量命名规则

    1.常量不使用$符号,一旦使用系统就会认为是变量
    2.常量的名字组成由字母,数字。下划线组成,不能以数字开头
    3.常量的名字通常是以大写字母为主,
    4.常量命名的规则比变量要松散,可以使用一些特殊字符,该方式只能使用define定义

    细节

    define和const定义的常量是有区别的:在于访问权限区别
    定义常量通常不区分大小写,但是可以区分,可以参考define函数的第三个函数
    bool define( string $name, mixed $value[, bool $case_insensitive = false] )
    name:常量名。
    value:常量的值;在 PHP 5 中,value 必须是标量( integer、 float、string、boolean、NULL)在 PHP 7 中还允许是个 array 的值。
    case_insensitive
    如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。比如, CONSTANT 和 Constant 代表了不同的值。

常量使用形式:必须赋值

有的时候还需要使用另外一种形式来访问(针对的是特殊名字的常量)

系统常量

例如:
PHP_VERSION:PHP版本号
PHP_INT_SIZE:整形大小
PHP_INT_MAX:整形能表示的最大值(PHP中整形是允许出现负数:带符号)

特殊常量(魔术常量)他们由双下划线开始+常量名+双下划线结束,这种常量称之为系统魔术常量;魔术常量的值通常会跟着环境变化,但是用户改变不了

DIR:当前被执行的脚本所在电脑的绝对路径
FILE:当前被执行的脚本所在电脑的绝对路径(带自己文件夹的名字)
LINE:当前所属的行数

NAMESPACE:当前所属的命名空间
CLASS:当前所属的类
METHOD当前所属的方法

变量和常量的使用:

  1. 凡是数据会可能变化的,那么肯定是用变量
  2. 数据不一定会变的,可以使用常量或者变量(变量居多)
  3. 数据不允许被修改的,一定用常量

markdown

Posted on 2019-01-26 | Edited on 2019-02-21 | In markdown

由于第一次写博客,连基本语法都不会所有先摘一篇markdown的基本语法文章,以便日后写文参考
摘自 https://blog.csdn.net/tyyking/article/details/79682157

标题的写法:

前面带#号,后面带文字,分别表示h1-h6,上图可以看出,只到h6,而且h1下面会有一条横线,注意,#号后面有空格

列表(分为无序和有序)

无序

可以看到,无序列表可以用 , + , — 来创建,用在线编辑器看,实际上是转换成了ul>li ,所以使用哪个都可以,推荐使用吧

有序



第一组本来是3 2 1 倒序,但是现实3 4 5 ,后面一组 序号是乱的, 但是还是显示 3 4 5 ,这点必须注意了,如图:

区块引用

引用因为是一个区块,理论上是应该什么内容都可以放,比如说:标题,列表,引用等等,看看下图:

或者可以修改成:

华丽的分割线

分割线可以由* - _(星号,减号,底线)这3个符号的至少3个符号表示,注意至少要3个,且不需要连续,有空格也可以

链接

支持2种链接方式:行内式和参数式,不管是哪一种,链接文字都是用 [方括号] 来标记。
行内式的链接格式是:链接的文字放在[]中,链接地址放在随后的()中

链接还可以带title属性,好像也只能带title,带不了其他属性,注意,是链接地址后面空一格,然后用引号引起来

这是行内式的写法,参数式的怎么写:

图片

图片也有2种方式:行内式和参数式
1.”![我是图片](htpps://…)”
2.”[图片]:htpps://…”
“图在这![图片]”

以上图:



用法跟链接的基本一样,唯一的不同就是,图片前面要写一个!(这是必须的),没什么好说的

代码框

1.单行
如果代码量比较少,只有单行的话,可以用单反引号包起来,如下:

2.多行


多行用三个反引号,如果要写注释,可以在反引号后面写

表格



从这3种不同写法看,表格的格式不一定要对的非常起,但是为了好看,对齐肯定是最好的,第一种的分割线后面的冒号表示对齐方式,写在左边表示左对齐,右边为右对齐,两边都写表示居中,还是有点意思的,不过现实出来的结果是,表格外面并没有线框包起来,不知道别人的怎么弄的

强调



一个星号或者是一个下划线包起来,会转换为倾斜,如果是2个,会转换为加粗

转义


删除线


参考文献:

http://www.appinn.com/markdown/

http://sspai.com/25137

https://www.cnblogs.com/liugang-vip/p/6337580.html

1…89

lh

89 posts
12 categories
© 2020 lh
Powered by Hexo v3.8.0
|
Theme – NexT.Pisces v6.7.0