PHP(一)基础知识总结

一、php基础知识
1.php语言标记 <?php    ?>
A 三种标记
 <?php     ?>      <? ?>     <?
省略结束标签适合纯PHP文件,如果是PHP与HTML混合开发,则不可省略

B 在html中嵌入纯变量
<?=变量名?>   
eg: <?php $a = 3; ?> <input  value="<?=$a?>" >

通过在html文件中嵌入php的开启结束标记来开启或关闭php模式。
php标记内的内容由php服务器处理。

2.php变量
A 变量

临时存储值得容器。
非函数内的变量,生命周期为脚本执行完毕。

变量的类型
php是弱类型语言,变量或常量的数据类型由上下文指定。

四种标量类型 两种复合类型 两种特殊类型
boolen integer float string array object  resouce null

伪类型 便于代码阅读
  mixed 一个参数可以接受多种类型,但没必要是所有类型。
  numbel 可以是interger float
  callback 函数或方法作为参数类型

数据类型的转换
  自动类型转换  强制类型转换

~~ isset() 与empty()
isset()用来检测一个变量是否已声明且值不为NULL。
empty()检查一个变量是否为空

C 可变变量 
可变变量用于变量名的动态设置和使用。
$hi = 'hello'; $$hi = 'world';
echo “$hi $hello”; echo “$hi ${$hi}”;

变量的引用赋值  $a=&$b,$a=$b与$a=10
$a=&$b(起别名)
相当于起别名。$a指向一片内存空间,$b也指向于同一片内存空间。   
$a = &(24*7); $a = & test();  引用赋值都无效,因为都没有名字。
不同于c语言中引用赋值,创建一个属于$a的内存空间,存储$b所在的空间地址。

$a = $b (不立马分配空间) 
PHP中将一个变量赋值给新变量时,不会立即为新变量分配内存空间,只是增加了对内存空间的引用。当原变量或者新变量作出任何改变时,才会为新变量 分配一块内存空间。

$a = 10
常量赋值给变量,分配内存空间

3.常量
A 概述

a.先声明常量,再使用常量。define()函数声明,const关键字声明。
   define("ABCD",'12345',true);   //不区分大小写。
   若直接使用ABCD,不加引号,未声明常量,会自动解析成字符串,但是性能慢。
   defined("ABCD")   //判断是否声明了常量
   constant(“常量名”)  //获取常量值
   get_defined_contstants()  //获取脚本中已定义的常量值
b.const定义   const ABCD = "12345";
c.新版本支持表达式定义

B define()与const的区别
a.define()  函数定义   const 关键字定义
b.const是在编译时定义 ,必须处于最顶端的作用区域,不能在函数,循环及if条件中使用;
   define()执行时定义,是函数,也就是能调用函数的地方都可以使用
c.const只能用普通的常量名,define常量名中可以有表达式
e.define()  可以设置大小写是否敏感  define不能在类中使用,可用于全局变量

C 预定义常量
PHP_OS 、PHP_VERSION、TRUE、FALSE、NULL、DIRECTORY_SEPARATOR、PATH_SEARATOR、 M_PI、 E_ERROR 、E_WARNING

D 魔术常量
__FILE__  当前文件名    __LINE__ 当前行号   __FUNCTION__ 当前函数名  __CLASS__ 当前类  __METHOD__ 当前对象的方法名

4.运算符
a.算术运算符
  + - * / % ++ -- **
  $a**$b  求幂运算符
b.字符串运算符
  .  连接运算符
c.赋值运算符
  =  += -= *= /= %= .=
d.比较运算符
  >   <   >=  <=  ==  ===  <> !=  !==   <=>  ??
  $a <=> $b  当 $a < $b 时 -1  当 $a = $b 时 0 当 $a > $b 时 1
  $a  ?? $b  ?? $c   返回第一个不为null的值   
  $a ?: $b   三目运算符简写  empty($a) ? $a : $b
e.逻辑运算符
  &&  ||  !  xor
f.位运算符
 & |  ^ ~   <<<  >>>
g.其他运算符
?:     `ls`    @    
h.运算符的优先级
 

~~表达式

~~流程控制

二.数组
1.数据概述
数组
:存储和操作一组变量。使用数组是为了将多个数组组织成一个单元使用。
使用数组的目的就是将多个相互关联的数组,组织在一起形成集合,座位一个单元使用。

2.数组的分类
索引数组:数组的键值为整数。
关联数组:数组的键值为索引值。

数组声明
$array[$key] = $value;
$array = [$key => $value];
$array = [[$k1=>$v1],[$k2=>$v2]];

数组遍历
for循环遍历:for($i=0;$i<count($array_name);$i++) {  $array_name[$i]  }
foreach循环遍历:foreach($array as $key=>$value) {}

预定义数组
服务器变量:$_SERVER
环境变量:$_ENV
HTTP GET 变量:$_GET
HTTP POST 变量:$_POST
request 变量:$_REQUEST
HTTP 文件上传变量:$FILES
HTTP Cookies:$_COOKIE
session变量:$_SESSION
gloabl 变量:$GLOBALS

B 操作数组
键/值操作函数
array_values(): 返回数组中所有的元素值
array_keys():返回数组中所有的键值
in_array()  array_search() :判断数组中是否存在某元素,返回是否 和 键值。
array_key_exists() :判断数组中是否存在键值。
isset() 判断数组中的键值是否设置了值。null为未设置值,返回false。
$arr = ['1'=> null, '2'=>2] ;   isset($arr['1'])  false。array_key_exists('1',$arr );   true;
array_filp():键值交换。多个相等的值,覆盖前面。值不为字符串和数字则报错。
array_reverse():数组元素翻转。

统计数组个数和唯一性
count():统计数组元素个数。
array_count_values():统计数组中所有值出现次数
array_unique():去除数组中重复元素。

使用回调函数处理数组的函数
array_filter()
数组根据自定义规则过滤。
array_filter($arr,'myfunction')
循环数组,调用自定义函数,true 返回当前值 false 过滤当前值。

array_walk()
数组自定义规则操作。
myfunction(‘值’,'键','自定义参数')
循环单个数组 返回处理结果

array_map()
多个数组自定义处理。
myfunction($v1,$v2)  array_map('myfunction',arr1,arr2)
数组的长度应该相同,回调函数是平行作用已各单元之上的
多个数组循环平行处理

数组的排序函数
sort() rsort():数组按值排序,忽略键值,使用数字索引
ksort() krsort():数组按键排序。
asort() arsort():数组按值排序,保留键值。
natsort()  natcasesort():自然排序,数字1~9 字母a~z,忽略键值。 区分大小写与 不区分大小写
usort() uasort() uksort():用户自定义排序。自定义值排序,保留键值,自定义键排序array_multisort():多维数组排序,相似与order by。

拆分、合并、分解和结合数组
array_slice()
按规则截取数组。
offset 正数 从前往后指定位置开始   负数从后往前
length  截取的长度 负数从后往前
是否保留键值

array_splice()
截去指定位置的数组。用新数组替代。

array_combine()
合并两个数组,一个做键值,一个做值

array_merge()
合并两个数组。键名相同,则覆盖。

~~面试题
数字索引对应相应的空间,合并数组时会对空间重新排序,所以不会覆盖。
字符串索引只会对应一个唯一空间,合并数组时会覆盖。
array_merge($arr1, $arr2):合并数组
对于数字索引,重新排序空间,所以不覆盖。对于键值索引,只对应一个空间,所以会覆盖。
$arr1 + $arr2 追加数组
把2中1没有索引键值的数据元素加上去,所以1中原有的,不论数字索引还是键值索引都不覆盖。要想不覆盖用array_merge_recursive(),会以相同键值的对应数组合并。

array_intersect()
两数组取交集

array_diff()
数组取差集

数组与数据结构
array_push()
向数组尾部添加一个或多个参数,返回元素个数
如果仅添加一个参数 可以使用 $array[] = $value

array_pop()
删除数组中的最后一个元素,并返回

array_shift()
删除数组中的第一个元素,并返回

array_unshift()
数组头部添加一个或多个参数,返回元素个数

其他
array_rand():随机选出数组的一个或多个元素,返回键值
shuffle():数组元素重新排序
array_sum():数组求和
range():创建一个包含指范围的元素的数组

数组的运算符号 +  
合并数组 后面相同键名的不会影响后面的

unset():取消数组中的任一位置元素,不重建索引

三、函数

函数的定义

定义一个独立的,用于执行特定任务,可以返回一个返回值的代码功能。
函数名 参数列表  函数体(返回值)

函数参数

定义的函数参数为形参。调用的函数参数为形参。

函数的返回值

无返回值,函数执行一个过程,有返回值,返回函数执行结果。

php7增加了对函数返回值类型的声明
function 函数名()  :  类型  { 函数体; return 返回值;}

标量类型声明

php5后 对函数的参数加上类型声明,会对不符合预期的参数进行强制类型转换。
php5只能是类名,接口,数组,回调函数。
php7形参类型可以是标量。
对类型的限制php有两种处理模式:强制模式,传入的参数不符合预期的参数类型自动强制转换为指定类型
严格模式:传入的参数不符合预期的参数类型会报错。设置严格模式,需在代码开头处 定义 declare(strict_types = 1)

变量的范围

局部变量

函数内部声明的变量,作用域仅限于函数内部

全局变量

在函数外部定义,作用域未变量定义处开始,到程序文件的末尾。
php中声明的全局变量不能在函数内直接调用,需要使用global() 加载全局变量,或者使用$GLOBAL['全局变量名']。

静态变量

局部变量从存储方式上可分为:动态存储类型和静态存储类型。
内部动态变量在函数执行完后自动释放。如果希望内部变量依然保存在内存中,使用静态变量。
静态变量在函数执行完后,不会消失,而是在所有对该函数的调用之间共享。
使用关键字static 调用

函数的形式

定义一个函数时,考虑函数的功能描述,参数说明,返回值。

常规参数的函数

实参和形参应该个数相等,类型一致。

伪类型参数的函数

声明函数时,不指定参数的类型,每个参数都可以传任意值。
如果参数能够接受多种但不必是所有类型的值,可以使用mixed标记这个参数类型。如果是interger或float,可以使用number标记参数。
除了参数外,函数的返回值也可以根据参数类型的不同,返回不同类型的值。

引用参数的函数

php默认是按值传递参数。在函数内部改变变量的值,不影响函数外部的值。外部的变量与函数的内部变量存储在不同的空间。
要想改变外部的变量的值,则必须通过引用传递参数。把数值或变量的内存存储区块相对地址导入函数之中。参数加&。
参数加&,调用函数时必须传递一个变量给这个参数,不能传递一个值。

默认参数的函数

在声明函数时,给函数的参数指定默认值。在调用函数时,如果没有指定参数的值,会使用参数的默认值。
默认值必须是常量表达式,数组,null,不能是变量,类成员或者函数调用。

可变个数参数的函数

使用默认参数适用于实参个数少于形参的情况,当实参个数多于形参,可以用可变参数列表。即希望函数可以接受任意数量的参数。
func_get_args();  调用函数时,函数内部用 $args = func_get_args();接收传递的个数。func_get_args()接收一个数字,返回指定的参数。
php5.6后,可以不依赖func_get_args()函数,使用“...”运算符来实现变长参数的函数。
function sum( ...$ints) {}  传递不同个数的参数 调用函数
function sum(int ...$ints) {}  传递指定类型不同个数的参数   调用函数
在调用函数时,使用‘...’可将数组和可遍历对象展开为函数参数。
$arr = [2,3,4]   add(1, ...$arr); 将数组中的成员分别传给对应的参数。

参数类型也可以为空,当启用这个特性,传入的参数类型要么是给定的类型,要么是null。在类型前加一个问号 “?”
function fun(?string $str){}    fun('123'); fun(null); 没问题   fun();报错

回调函数

回调函数即调用函数时,并不是传递一个标准的变量作为参数,而是将另一个函数作为参数传递到调用的参数中。
参数的类型为 callback。
为什么要传函数作为参数?参数的传递可以改变调用函数的执行行为。值传递给函数的功能有限,使用函数作为参数传递,增加了函数功能的扩展。

如何声明和使用回调函数?
1.变量函数
将函数名作为值赋给变量。 $变量名();  调用函数。
变量函数不能用于语言结构,如echo() print() unset() isset() empty() include() require()

2.使用变量函数声明和应用回调函数
参数传递 定义的回调函数名字符串, 函数内部使用变量函数执行。

3.借助call_user_func_array()函数自定义回调函数  
call_user_func_array(“定义的函数”,[定义函数要传的参数列表])   函数为全局函数

4.类静态函数和对象方法回调
将一个类的静态方法或对象中的一个成员方法作为回调函数
call_user_func_array(['类名称',“类中静态方法名”],[定义函数要传的参数列表]) 
call_user_func_array([对象引用,“对象中的方法名”],[定义函数要传的参数列表]) 

递归函数

在函数体内直接或间接的调用自己。

使用自定义函数库

将多个自定义的函数组织到一个或多个文件中,这些收集函数定义的文件就是创建的php函数库。
如果在php的脚本中使用这些西丁一函数,需要使用include() include_once() require() require_once()

require() 在脚本运行时,首先引入指定文件;include() 运行到该语句所在位置时,才引入指定文件。
once  如果脚本中已经包含了指定文件 则不会再引入。
不是真正的函数,属于语言结构。 require "1.txt"   代码语句的一种写法。 如 echo(123) => echo "123"; 
 

匿名函数和闭包

临时创建一个没有指定名称的函数。常用作回调函数参数的值。也可以作为变量的值来使用。
使用use 来连接闭包函数和外界的变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值