PHP学习——文件和函数基础知识(四)

一、常用的系统函数

1)有关输出的函数

print():类似于 echo 输出提供的内容,本质是一个结构(不是函数)echo print(任何数值) 都是输出1

print_r(): 类似于var_dump,但是更简单,不会输出数据的类型,只会输出具体的数值

image-20240204165320284

2)有关时间的函数

date(): 按照指定格式对对应的时间戳(从1970年格林威治时间开始计算的秒数),没有指定时间戳,就是默认当前的时间戳。

image-20240204165959713

image-20240204165703801

image-20240204165803099image-20240204165824133

image-20240204165841954image-20240204165852622

time(): 当前时间对应的时间戳

mircrotime(): 获取微秒级别的时间

image-20240204170229255 image-20240204173208281

Strtotime(): 按照规定格式的字符串换成时间戳。

image-20240204173525221

3)有关数学的函数

  • max():指定参数中最大值

    image-20240205104042000
  • min():

  • rand():

  • mt_rand():

  • round():

  • cell():

  • floor():

  • pow():

二、文件

PHP 代码执行流程

  • 读取代码程序(PHP程序)
  • 编译:将PHP代码转换为字节码(生成opcode)
  • zendengine来解析opcode,按照字节码去进行逻辑运算
  • 转换成对应的HTML代码

文件加载原理

  • 在文件加载(include 或者 require)的时候,系统自动将包含文件中的代码相当于嵌入到当前文件中
  • 加载位置: 在哪加载,对应文件中的代码相当于嵌入到当前文件中
  • 在PHP中包含的文件是单独进行编译

​ PHP文件在编泽的过程中如果出现了语法错误,那么会失败(不会执行):但是如果被包含文件有错误的时候,系统会在执行到包含include这条语句的时候才会报错。

image-20240204185526695

相当于

image-20240204185602158

三、Include 和 include_one的区别

  • **Include:**系统会碰到一次,执行一次:如果对统一个文件进行多次加载,那么系统会执行多次;

  • **Include_once:**系统碰到多次,也只会执行一次

四、Include和require的区别

  • 本质都是包含文件,唯一的区别就是包含不到文件的时候的报错形式不一样

  • Include报错之后后面的PHP代码可以继续执行

    image-20240204190411452
  • require报错之后PHP代码不可以继续执行

    image-20240204190455053

五、函数基本概念、语法、命名

函数声明和调用是不分顺序的(原因:先编译后执行)

image-20240204192333956

函数执行流程

image-20240204192732156

命名规则

​ 和变量的规则几乎是一样的,两种常用的方式:驼峰式和下划线式

默认值

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

image-20240204200238198

引用传递( 函数内部操作会影响外部)

​ 有的时候,希望在函数内部掌到的外部数据,能够在团数内陪改变,那么就需要明确告知团数(定义时),函数才会在调用的时候去主动获取外喽数据的内存地址。以上这种定义形式参数的方式叫作引用传值。

image-20240204200628543

image-20240204200758239

image-20240204200814864

return

​ 还可以在文件中之际使用(不在函数里) ,表示文件将结果return 后面跟的内容,转交给包含当前文件的位置。return在文件中就代表着终止文件。

六、作用域

超全局变量(第三种)

  • 系统定义的变量(预定义变量)
  • PHP 中只允许全局空间使用,理论上函数内部不可以

image-20240204203841347image-20240204203953187

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

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

Global关键字:是一种在函数里面定义变童的一种方式

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

  • 如果使用glo6al定义的变量名在外都不存在(全局变量),系统会自动在全局空间(外部)定义一个与局变量同名的全局变量本质的形式:在通数的内和外部,对一个同名变量(全局和局部)使用同一块内存地址保存数据,从而实现共同拥有。·

  • 基本语法: Global变量名;不能赋值变量名=值:

image-20240204204428516

但是,我们一般也不会这么勇。

七、静态变量

image-20240204213835711

八、可变函数

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

例子

image-20240205091749041image-20240205095130787

九、匿名、闭包函数

概念: 没有名字的函数,本质上是一个对象。

例子

image-20240205095508066

闭包函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function display(){
$name = __FUNCTION__;

$innerfunction=function() use($name){
echo $name;
};

$innerfunction();
};

display();
?>


<?php
function display(){
$name = __FUNCTION__;

$innerfunction=function() use($name){
echo $name;
};

return $innerfunction();
};

$closure = display(); // 这一行执行完之后局部变量是不会被释放 ,从而外部嗲用内部匿名函数的时候可以调用

?>

image-20240205104243721

image-20240205104340756

注意:在php中允许实参个数多于形参个数:多余部分函数内部不用而已

image-20240205110337552image-20240205110405944