php -- 简单知识(一)

 0.网站基本知识:

1.常见的网站服务器有三种: Apache, Nginx 和 IIS。

  • Apache :  免费,稳定,并发不高
  • Nginx : 免费,高并发,没有  Apache 稳定
  • IIS : 收费,仅限于 Windows 平台

2. 本地域名解析 : hosts文件: C:\Windows\System32\drivers/etc 下

                                                   快捷方式: windows键 + R 输入    drivers

3. windows 下 PHP 运行环境简单配置: phpStudy + subline

  1.  打开phpstudy,点击切换版本,选择合适的 php版本和服务器(多选nginx)
  2. 点击 ‘启动’,启动phpstudy;
  3. 打开 subline,选择 phpstudy 安装文件下的 www 路径。phpStudy/PHPTutorial/WWW
  4. 在 www文件下写php 代码,
  5. 浏览器访问路由: localhost/index.php

1.基本的 PHP 语法

  • 1.     PHP 脚本可以放在文档中的任何位置。
  • 2.     PHP 脚本以 <?php 开始,以 ?> 结束:
<?php
// PHP 代码
?>
  • 3.    PHP 文件的默认文件扩展名是 ".php"。
  • 4.    PHP 中的每个代码行都必须以分号结束。“ ;”分号是一种分隔符,用于把指令集区分开来。
  • 5.    PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。通过 PHP,有两种在浏览器输出文本的基础指          令: echo 和 print
  • 6.    单行注释  //  或   #      ;  多行注释  /*    */
  • <!DOCTYPE html> 
    <html> 
    <body> 
    
    <h1>My first PHP page</h1> 
    
    <?php 
    echo "Hello World!"; 
    ?> 
    
    
    <?php
    // 这是 PHP 单行注释
    
    /*
    这是 
    PHP 多行
    注释
    */
    
    ?>
    
    </body> 
    </html>

     

 2.  PHP 变量

1.  PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

2.  global 关键字用于函数内访问全局变量。在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global       关键字:

3. 删除变量 : unset($value)

4. 预定义变量:PHP系统内部定义的变量,也是PHP系统自动收集的数据结果。

  1. 预定义变量也是表量,符合变量规则;
  2. 预定义变量都是数组(数据组合,有多个数据在一起);
  3. 系统提供了 9 个预定义变量,每个变量都有自己特定的数据
  • $_GET : 用户通过 get 方式提交的数据; ( 与表单和 URL对应)
  • $_POST : 用户通过 post 方式提交的数据; (与表单对应)
  • $_REOUEST : 用户通过 get 和 post 提交的数据;
  • $_SERVER : 用户和服务器的基本信息数据(数据的名字不由开发者控制,系统已经定义好)
  • $_FILES : 用户提交的文件数据(文件上传);
  • $_SESSION : session 数据;
  • $_COOKIE : cookie 数据;
  • $GLOBALS :  所用全局变量,也是唯一一个不是以下划线开始的预定义变量;
  • $_ENV : 环境变量

5. 变量传值:

  • 值传递 : 定义新变量,将存在的变量赋值给新变量;  $c = $a;
  • 引用传递 :定义新变量,将存在的变量所指向的内存地址(&)赋值给新变量。 $d = &$a;

6. 常量:一种存贮数据的符号(1. 常量通常大写字母;2. 常量数据一旦定义,不可改变。)

1.定义常量

  • 使用函数  define('常量名' , 常量值 )
  • 使用关键字  const 常量名 = 常量值

2. 访问常量

  • 直接访问 : 常量名;
  • 使用函数: constant('常量名')
  • 示例;
    # 使用函数定义
    define('name','jack');
    
    # 使用关键字定义:
    const home = 'shanghai';
    
    #直接访问
    echo name;
    echo home;
    
    # 使用函数访问
    echo constant('name'),'<br/>';
    echo constant('home');

    7.  系统常量:系统内部定义的常量,用户可以直接访问,也只能访问

  固定系统常量:值是固定的

  1. PHP_VERSION   : PHP版本号
  2. PHP_INT_SIZE    : PHP中整数所占用的字节数
  3. PHP_INT_MAX     :  PHP中整数能表示的最大数

 魔术常量 :以双下划线__开始,也以双下划线__结束

  1. __DIR__ :  当前运行文件的所在绝对路径;
  2. __FILE__: 当前运行文件的绝对路径(带文件名);
  3. __LINE__: 当前代码所在的行号;
  4. __FUNCTION__: 函数内部使用,表示当前函数的名字。

 

  • 在 PHP 中有两个基本的输出方式: echo 和 print。

echo 和 print 区别:

  1.    echo - 可以输出一个或多个字符串
  2.    print - 只允许输出一个字符串,返回值总为 1
  3.    提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

echo 语句:

  1. echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。
  2. echo 命令输出字符串(字符串可以包含HTML标签)

print 语句:

  1. print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。
  2. print 命令输出字符串(字符串可以包含 HTML 标签)

 

  • 数据类型 :

String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。

 var_dump() 函数返回变量的数据类型和值;   如果变量不存在则返回 NULL。该函数有输出的功能,因此不必加其它的输出函数。

  • 字符串变量

注释:当您赋一个文本值给变量时,请记得给文本值加上单引号或者双引号。

## PHP 并置运算符   :     (  .  ) 用于把两个字符串值连接起来。

## PHP strlen() 函数  :    strlen() 函数返回字符串的长度(字符数)。

## PHP strpos() 函数 :   strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

  • 布尔类型 :
  1. 布尔类型只有两个值 :true 和 false
  2. 布尔值不区分大小写 :true 和 TRUE 一样
  3. 布尔类型通常不说用来存储数据,而是程序用来进行过程或者结果判定使用。
  • 字符串型 :
  1. 单引号字符串:使用英文单引号 ' ' 包裹字符;
  • 里面能解析少量转义符 : 单引号 ( \' ) , 反斜杠( \\ )
  1. 双引号字符串:使用英文双引号 " " 包裹字符;
  • 里面能解析较多转义符 :$符号(\$), 双引号( \""),反斜杠( \\ ),回车换行符(\r\n) ,tap符( \t )
  • 里面如果有 PHP变量,也可以被解析。
  • 变量不要与其他字母或者数字保留在一起;如 $abc,系统默认为 $abc 而不是:$a;
  • 解决方案:1)让变量与后面的内容之间有空格,如 $a bc  ,系统会识别 $a;
  • 2) 使用 {} 将变量独立包裹,如 {a} bc
  1. 定界符:使用PHP中的定界符 <<<标识符 + 标识符结尾形式包裹(多行字符串的一种形式)
  • heredoc 结构 : 双引号的一种多行字符串形式
  • nowdoc 结构 :单引号的一种多行字符串形式      
  • // 定界符
    //  heredoc
    $str3 = <<<EOF
    	这里都是字符串
    EOF;
    
    //  nowdoc
    $str4 = <<<'EOF'
    	这里是定界符
    EOF;
    
    echo $str3,'<br/>',$str4;

     

定界符内的所有内容都是字符串的内容(包括注释);

定界符的起始符号之后不能有任何信息,包括空格;

定界符的结束符号必须顶格,定界符的结束符号后同样不能有任何信息;

 

  • 数组

##  数组能够在单个变量中存储多个值;

1.  用于创建数组:  array(); 或者 [ ]

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

$re = ["Peter"=>"35","Ben"=>"37","Joe"=>"43"];

2.  在 PHP 中,有三种类型的数组:

  • 数值数组 - 带有数字 ID 键的数组
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组。 ($p [ ] = arry(数组) 给多维数组加元素数组) 

3.  获取数组的长度 -   count() 函数;

3.  删除元素 :使用 unset(), 指定数组变量加上 [下标], 删除指定下标;  指定变量,删除整个数组 

4.  遍历数值数组:(可使用 for 循环  )


<?php
$cars=array("Volvo","BMW","Toyota");
$arrlength=count($cars);
 
for($x=0;$x<$arrlength;$x++)
{
    echo $cars[$x];
    echo "<br>";
}
?>

5.  遍历关联数组 : (可使用 foreach 循环)

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>
  • 数组排序

       数组中的元素可以按字母或数字顺序进行降序或升序排列。

  1. sort() - 对数组进行升序排列
  2. rsort() - 对数组进行降序排列
  3. asort() - 根据关联数组的值,对数组进行升序排列
  4. ksort() - 根据关联数组的键,对数组进行升序排列
  5. arsort() - 根据关联数组的值,对数组进行降序排列
  6. krsort() - 根据关联数组的键,对数组进行降序排列         

类型判定:

(类型判定是用到PHP提供的系统函数,函数以 is_+ 数据类型

  1.  is_int : 判定整型 (is_integer)
  2. is_float : 判定浮点型;
  3. is_bool :判定布尔型( is_boolean)
  4. is_string : 判定字符串型;
  5. is_null : 判定空型;
  6. is_array : 判定数组型;
  7. is_resourse : 判定资源型;
  8. is_object : 判定对象型;
  9. is_numeric : 判定是否是数值或者数值型字符串;
  10. is_scalar : 判定是否是基础数据类型(整型,浮点型,布尔型,字符串型)。

类型转换:

  • 自动转换:系统自动识别;
  • 强制转换: 资源和 null 不能强制转换。
  1. integer :  转换成整型;
  2. float : 转换成浮点型;
  3. bool : 转换成布尔类型;
  4. string : 转换成字符串类型;
  5. array : 转换成数组类型;
  6. object : 转换成对象类型。
  7. ex :    echo  (float)$value ;      只是对数值操作,不改变类型
  8. ex :    settype($value , 'float')      改变类型

echo,print,print_r,var_dump 的区别

1.echo

输出一个或者多个字符串。

2.print

和 echo 最主要的区别: print 仅支持一个参数,并总是返回 1。

3.print_r

打印关于变量的易于理解的信息,如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。 记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。

4.var_dump

此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

5.var_dump 和 print_r 的区别

var_dump 返回表达式的类型与值而 print_r 仅返回结果,相比调试代码使用 var_dump 更便于阅读。

PHP 类型比较

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

错误抑制符:

  1. 错误抑制符是用来抑制可能出现的错误的;
  • 抑制级别 : notice, warning 低级别错误;
  1. 错误抑制符 @ 应该用在出现错误的位置;
  • 如果只是一个表达式错误,那么直接 @;
  • 如果错误是一个过程,那么需要先将过程使用 ()包起来,然后进行抑制。

PHP 运算符

    PHP 比较运算符:

  • 运算符名称描述实例
    x == y等于如果 x 等于 y,则返回 true5==8 返回 false
    x === y绝对等于如果 x 等于 y,且它们类型相同,则返回 true5==="5" 返回 false
    x != y不等于如果 x 不等于 y,则返回 true5!=8 返回 true
    x <> y不等于如果 x 不等于 y,则返回 true5<>8 返回 true
    x !== y绝对不等于如果 x 不等于 y,或它们类型不相同,则返回 true5!=="5" 返回 true
    x > y大于如果 x 大于 y,则返回 true5>8 返回 false
    x < y小于如果 x 小于 y,则返回 true5<8 返回 true
    x >= y大于等于如果 x 大于或者等于 y,则返回 true5>=8 返回 false
    x <= y小于等于如果 x 小于或者等于 y,则返回 true5<=8 返回 true
            x <= >y小于等于大于左边大于右边返回1,等于右边返回0,小于右边返回 -1 

合并运算:  ??  

  • $value = $a ?? 10;         存在结果,取原始数据$a; 不存在,使用替代结果 10;
  • $site = $_GET['site'] ?? 'php中文网';
  • $site = isset($_GET['site']) ? $_GET['site'] : 'php中文网';   (老版本书写方式)

连接运算符 :   .

ex:  $a = 'hello';       $b = 'world';         echo $a . $b ;

三元运算符

语法格式  :    (expr1) ? (expr2) : (expr3)

        对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。

自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。

简化的三目运算 :

    表达式1?:表达式3 === 表达式 1  ??表达式 3  (不完全等价;三目运算是判定表达式1 的结果是否为真;而合并运算是判定表达式1 是否存在 ) 

PHP 逻辑运算符

# 逻辑运算(将所有表达式的结果转换成布尔结果之后再进行运算) :

1.  $ res = $age < 18 || $age > 65;        返回 true 或者 false;

# 短路运算(逻辑与,逻辑或) :

2.  $ age > 65 || $b = 10 ;   var_dump($b) ;      如果前面不成立,会给后面 $b 赋值;

# 前面的操作如果不成功那么代码没有必要继续执行

3.   $a = false or die('错误');  echo $a;

 

#  自操作运算(针对一个变量的自我操作运算,能够让变量实现自我规律改变)

1. 自操作运算只需要一个变量即可;

2. 自操作运算分为两种 

  • ++ : 变量自增,即自己加 1 ,然后赋值给 自己
  • --   : 变量自减,既自己减 1 ,然后赋值给自己

3. 自操作符号分前置和后置

  • 前置自操作符 : 先运算自己,然后把改变后的结果去参与其他运算;
  • 后置自操作符 : 先把自己当前的值保留区参与其他运算,然后再运算自己

                      $a = $b = 10 ;
                      echo $a++,++$b;    (10,11)
                      echo $a,$b;        (11,11)

运算符名称描述实例
x and y如果 x 和 y 都为 true,则返回 truex=6
y=3 
(x < 10 and y > 1) 返回 true
x or y如果 x 和 y 至少有一个为 true,则返回 truex=6
y=3 
(x==6 or y==5) 返回 true
x xor y异或如果 x 和 y 有且仅有一个为 true,则返回 truex=6
y=3 
(x==6 xor y==3) 返回 false
x && y如果 x 和 y 都为 true,则返回 truex=6
y=3
(x < 10 && y > 1) 返回 true
x || y如果 x 和 y 至少有一个为 true,则返回 truex=6
y=3
(x==5 || y==5) 返回 false
! x非(取反)如果 x 不为 true,则返回 truex=6
y=3
!(x==y) 返回 true

     PHP 数组运算符

运算符名称描述
x + y集合x 和 y 的集合
x == y相等如果 x 和 y 具有相同的键/值对,则返回 true
x === y恒等如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y不相等如果 x 不等于 y,则返回 true
x <> y不相等如果 x 不等于 y,则返回 true
x !== y不恒等如果 x 不等于 y,则返回 true

 

PHP 条件语句 :

在 PHP 中,提供了下列条件语句:

  • if 语句 - 在条件成立时执行代码
  • if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块

 

 switch 语句   (凡是 switch能做的分支,if都能做;但是if能做的 switch 不一定能做 )

switch结构:
    
    switch(条件变量){
            case 值:
                满足条件 1 要执行的代码快
                代码执行控制 : break

            ...
            default :
                不满足所有条件执行的代码快
                代码执行控制 : break
        }


    1. 确定目标条件: 条件必须是颗粒度的,通常是一个变量(没有比较符号)
    2. 一个条件对应一个 case 指令;
    3. 确定每个case 指令是否需要结束
        . 结束使用 break
        . 不结束,代码会继续执行下一个 case 的代码快(代码块共享)
    4. 确定是否需要不满足条件的代码块: default 
        . 没有 : 结束;
        .  有 : 确定 default 的代码块

$day = 6;
switch($day){
	case 1:
		echo '今天是星期一';
		break;
	case 2:
	case 3:
	case 4:
	case 5:
		echo '继续上班';
		break;
	default :
		echo '要放假了';
		break;
	}
	

 

## PHP - if 语句

if 语句用于仅当指定条件成立时执行代码。

语法  :   if (条件) {   条件成立时要执行的代码; }

 

## PHP    -     if...else 语句

在条件成立时执行一块代码,条件不成立时执行另一块代码,请使用 if....else 语句。

语法  :     if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}

## 

PHP - if...elseif....else 语句

在若干条件之一成立时执行一个代码块,请使用 if....elseif...else 语句。.

语法  :  

if (条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}

PHP Switch 语句

    用于根据多个不同条件执行不同动作;

工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行。

语法
<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

实例
<?php
$favcolor="red";
switch ($favcolor)
{
case "red":
    echo "你喜欢的颜色是红色!";
    break;
case "blue":
    echo "你喜欢的颜色是蓝色!";
    break;
case "green":
    echo "你喜欢的颜色是绿色!";
    break;
default:
    echo "你喜欢的颜色不是 红, 蓝, 或绿色!";
}
?>

 

PHP 循环结构

在 PHP 中,提供了下列循环语句:

  • while - 只要指定的条件成立,则循环执行代码块
  • do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块(专门遍历数组)

一 .   while 循环

语法

    语法结构:
while (条件表达式)
{
    循环体;
    循环条件变更;
}

$i = 1;
while($i<=10){
	echo '你好,明天<br/>';
	$i++;
}	

二 .  do .. while 语句 

语法

do
{
    要执行的代码;
    循环变更的条件
}
while (条件);


$i = 1;
do{echo $i.'<br/>';
	$i++;
}
	while($i <10);

三 。 for 循环

for 循环用于您预先知道脚本需要运行的次数的情况。

语法

for (初始化条件表达式; 边界判定表达式; 条件变更表达式)
{
    循环体;
}
实例
<?php
for ($i=1; $i<=5; $i++)
{
    echo "The number is " . $i . "<br>";
}
?>

 

四 。 foreach 循环 

foreach 循环用于遍历数组。

语法

foreach ($array as $value)
{
    要执行代码;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

实例
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
    echo $value . "<br>";
}
?>

PHP 标签语法

        标签语法 : 指当PHP 嵌入到 HTML 中时,让 php代码的结构更加符合 HTML 的规范而设定的语法结构

  • 当分支或者循环的  {  出现时,使用冒号 : 代替
  • 当分支或者循环的  }  出现时,使用相应的    end + 标记内容;  代替
  • <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    </head>
    <body>
        //第一种方式(不推荐)
        <table>
    	    <?php 
    		for($i = 1;$i <= 9;$i++){
    			echo '<tr>';
    
    			for($j = 1;$j <= 9;$j++){
    				echo '<td>';
    
    				if($j <= $i){
    					echo "$i * $j = ".$i*$j;
    				}
    				echo '</td>';
    			}
    			echo '</tr>';
    		}
    
    	?>
    	</table>
    
       // 第二种方式 
    	<table>
    		<?php for($i=1;$i<=9;$i++):?>
    			<tr>
    				<?php for($j=1;$j<=$i;$j++):?>
    					<td>
    						<?php echo  "$j * $i = " .$j*$i ;?>
    					</td>
    
    				<?php endfor;?>
    			</tr>
    		<?php endfor;?>
    	</table>
    </body>
    </html>

     

PHP 函数

函数是通过调用函数来执行的。

语法

<?php

function functionName() {

// 要执行的代码

} ?>

PHP 函数准则:

  • 函数的名称应该提示出它的功能
  • 函数名称以字母或下划线开头(不能以数字开头)

##  如需让函数返回一个值,请使用 return 语句;

 

函数的形参 :

  • 形参是在函数定义时指定的变量
  • 形参的作用是在函数内部代替数据进行运算(占位符),形参数量可以根据需求来确定
  • 形参的作用:允许内部数据产生变化(从而运算出不同的结果)
  • // 函数的形参
    function demo($a = 2){
    	echo $a;
    }
    
    demo();        // 2
    demo(3);       // 3
    demo($a =5);   //5

     

函数的实参:

  • 实参:指在调用函数时传递进去的实际数据

函数参数的默认值:(默认值是在定义函数时给形参设定的预计值)

  • 调用时没有传递实参:使用默认值赋值给形参
  • 调用时有传递参数:使用实参赋值给形参

参数传值方式:指实参传入到形参后,内部的改变是否对外部有影响

  • 值传递:传递数值,内部修改不影响外部(所以外部只要是能得到数据的方式都可以做实参)
    • 如    function  a($b)
  • 引用传递:传递数据的内存地址,内部修改影响外部(所以只能传递变量)
    • 如    function  a(&$b)
<?php 

//值传递
function demo01($value){
	while($value>1){
		echo $value--,'<br/>';
	}
}

demo01(5);   // 5 4 3 2 
$value =5;
demo01($value);
echo $value;    //  5 



// 引用传递
function demo02(&$value){
	while($value>1){
		echo $value--,'<br/>';
	}
}

//demo02(5);  //demoo2单独传入值是不行的
$val = 5;
demo02($val);   // 5 4 3 2 
echo $val;      // 1

?>

函数返回值: return

  • 函数使用 return 返回内部结果;
  1. 默认函数最后会自动返回 null ;
  2.  return 可以返回任意类型的数据。
  • return 返回值是返回给函数调用处;
  •  return 一旦运行,之后的其他函数体就不会执行了

函数的规则

1. 函数命名规则:

  • 函数名字由数字,字母和下划线组成,数字不能开头;
  • PHP中函数名不区分大小写;
  • PHP中函数名不能重复;
  • 函数命名应当见名知意;
  • 当函数有多个单词组成的时候,通常使用以下两种方式
  1. 驼峰法:第一个单词首字母小写,其他单词首字母大写(小驼峰);
  2. 下划线法:都小写,但是单词间使用下划线连接 (较多使用);

函数体规则

  • 函数体主要是用来解决某个具体问题
  • 函数体内基本不进行输出操作,如果有数据的话通常是通过返回值返回给调用处
  • 函数操作通常只负责运算,不对结果负责(即结果交给调用处分析判定)

函数高级

1. 作用域

1.1 局部作用域(局部变量)

  • 在函数内部定义的变量
  • 局部变量只能在当前函数内部被访问
  • 形参只能在局部作用域使用

1.2 全局作用域(全局变量)

  • 即未在其他结构(函数)内部定义的作用域
  • 全局变量:在全局作用域定义的变量;
  • 全局变量只能在全局作用域访问;
  • 全局变量可以当作实参使用;
  • 全局变量不能在局部作用域访问,可以当作实参传递给函数内部使用
  • // 全局变量
    
    $a = 100;
    
    
    // 全局变量当作实参传递给函数内部使用
    function demo($a){           // $a 是函数内部的局部变量
    	echo $a;
    }
    
    demo($a);                    // 100   当前是在全局作用域使用
    

     

1.3 超全局作用域(超全局变量)

  • 超全局变量:系统定义的预定义变量;
  • 超全局变量不受作用域限制,都可以访问;
  • 全局变量都会被收纳在 $GLOBALS中;
  • 可以利用超全局变量来保存数据,让数据不受作用域限制;
  • $GLOBALS 会自动包含全局变量,同时还有以下超全局变量;
  1.  $_GET : 自动接收 GET 提交的数据;
  2.  $_POST :自动接收 POST 提交的数据;
  3.  $_COOKIE : 自动接收 cookie 数据;
  4. $_FILES :自动接收文件上传的数据;
  5. $GLOBALS :  自己包含自己;
  • // 超全局变量
    $a = 100;
    
    function demo(){
    	echo '<pre>';
    	var_dump($GLOBALS);
    	echo $GLOBALS['a'];
    }
    
    demo();
    
    输出:
    array(6) {
      ["_GET"]=> array(0) {
      }
      ["_POST"]=> array(0) {
      }
      ["_COOKIE"]=> array(0) {
      }
      ["_FILES"]=> array(0) {
      }
      ["GLOBALS"]=>array(6) {
        ["_GET"]=>array(0) {
        }
        ["_POST"]=>array(0) {
        }
        ["_COOKIE"]=>array(0) {
        }
        ["_FILES"]=>array(0) {
        }
        ["GLOBALS"]=>*RECURSION*
        ["a"]=>int(100)
      }
      ["a"]=>int(100)
    }
    100

     

1.4 跨作用域访问

  • 即在局部作用域访问全局变量,或者在全局作用域访问局部变量
  • global 是局部作用域声明全局变量的关键字
  • global 只能声明,不能赋值。
  • 变量全局存在,内部需声明,就可以使用;也可以在内部声明一个全局变量,外部也可以访问;

1.5 静态变量

  1. 静态变量是在函数内部定义的,使用 static 修饰的局部变量
  • static 修饰的变量是在函数编译(加载)时被初始化;
  • static 修饰的变量行在函数调用时会跳过执行;
  • 静态变量是保存在函数里面,所以每次调用时修改的值都可以被下次调用使用;

   2. 静态变量的作用

  • 让函数在多次调用时,能够共享内部数据变化;
  • 普通局部变量每次调用都会初始化
  • #静态变量
    function demo(){
    	$a = 1;
    	static $b =1;
    	echo $a++,$b++,'<br>';
    }
    
    demo();   # 11
    demo();   # 12

2. 强制类型;

1. 强类型参数

  1. 强类型是在形参定义时指定数据类型;

  • 规定实参必须传入相应类型;否则报错;
  • 保护函数内部结构运行正确;

  2. PHP是弱类型语言,会自动转换类型,一般可以不用

  3. 不想在内部进行过多的逻辑判定,可以使用强类型参数。

# 强类型参数
function demo(float $a, float $b){
	return $a+$b;
}

echo demo(1,"3");   // 4  php 会自动转换

2. 强类型返回值

3. 可变参数

       1. 可变参数是指参数的数量可以不确定数量;

       2. 形参中可以定义可变参数,吸收多余的实参变成数组;

       3. 实参传递数据时,可以利用可变参数,将数据(如数组)结构成多个参数;

#可变参数 
function demo01($a,$b,...$c){
	$sum = $a + $b;
	var_dump($c);      // $c 对应的数据类型为数组;相当于装包
	foreach($c as $num){
		$sum +=$num;
	}

	return $sum;
}

echo demo01(1,2,3,4,5);
# array(3) { [0]=> int(3) [1]=> int(4) [2]=> int(5) } 15

function demo02($a,$b){
	return $a + $b;
}

echo demo02(1,2);   # 3
$arr = [1,2];
echo demo02(...$arr)    # 3  相当于解包

4. 可变函数

    1. 可变函数就是利用 变量 + ()来寻找匹配的函数名当做函数访问

    2. 变量 + (): 系统自动理解为函数

# 可变函数
function demo(){
	echo __FUNCTION__;
	echo "HELLO";
}

# 定义变量
$fun = "demo";

# 可变函数(变量变函数)
$fun()   # demoHELLO

5 匿名函数

   5.1 简单匿名函数

  •  定义函数时函数没有名字
  • 使用变量保存函数的内存地址
  • 通过变量访问函数
  • 匿名函数语法:

           变量 = function(参数) {

                          函数体

                         return  返回值

                  } ;                  #注意:本质是给变量赋值,所以需要语句结束符 

   ##  调用方式 :    变量(参数)

$demo = function($num){
	echo $num;
};

$demo('hello');

   5.2  匿名函数闭包

          闭包:是一个定义在函数内,能够读取其他函数内部变量的函数(闭包函数)

          

 6. 系统函数

    1.  API文档查询

    2. 常用的系统函数

       字符串类:

  • explode : 将字符串按照指定的符号分隔,得到一个数组
  • implode : 将一个数组按照指定的符号连接成一个字符串
  • str_replace : 字符串替换
  • str_shuffle : 随机打乱一个字符串
  • str_split :按照指定长度将字符串分隔成数组
  • strlen : 获取字符串的长度(字节长度)
  • substr : 从字符串中截取指定位置和长度的字符串

       数组函数:

  • array_key_exists : 判断下标是否在数组中存在
  • array_keys : 获取数组全部下标,或某个确定值的下标
  • array_merge : 合并数组元素(相同字符串下标元素是覆盖)
  • array_pop : 从数组最后弹出一个元素(原数组元素减少)
  • array_push : 从数组最后加入一个元素(原数组元素增加)
  • array_unshift : 从数组最前面加入一个元素(原数组元素增加)
  • array_shift : 从数组最前面弹出一个元素(原数组元素减少)
  • shuffle : 将原始数组打乱
  • in_array : 判断元素是否在数组中存在
  • range : 生成一个规则数值数值
  • current : 获取当前数组指针所在位置的值
  • next : 将数组元素指针向后移动一位,并获取新元素的值
  • prev : 与next相反,向前移动
  • end : 指针移动到最后一个元素,并获取元素值
  • reset : 重置数组指针(回到第一个元素)

7. 文件包含

 php 提供了四种文件包含的方式:

    1.  include '文件名'   ( include('文件名')  )

    2.   require '文件名'

    3.   include_once '文件名'

    4.   require_once '文件名

# 1. 提前包含(向上包含):为了使用被包含文件中的数据或者结构

# 2. 最后包含(向下包含):为了将当前所有数据给被包含文件使用

                                             1. 被包含文件通常是为了显示数据;

                                             2. 可以不用管是什么格式,但是需要用php标签和语法来输出数据

## 附带三个文件 

# 01 被包含文件01;用于输出数据

<?php 
$infos = [
	'name'=>'小芳',
	'age' => 18,
	'gender' =>'女'
	];


# 02 被包含文件02,用于接收数据

<html>
	<head>
		<title>个人信息</title>
	</head>

	<body>
		姓名:<?php echo $infos['name']?>,
		年龄:<?php echo $infos['age']?>,
		性别:<?php echo $infos['gender']?>,
	</body>
</html>

# 03 控制文件,用于访问

<?php 

include 'data.php';

// include 'data02.html';  (这种方式也可以)

require_once 'data02.html';

?>



文件包含的区别

分析:

   1.  include 和 require 的区别

  • include 找不到文件报警告错误,不影响后续代码的继续执行
  • require 找不到文件报致命错误,后续代码终止执行

   2. 与 _once 的区别

  • 没有 _once: 多次包含,系统会多次加载(如果有函数会报同名错误)
  • 有 _once :只包含一次,系统包含后会记录当前被包含文件是否包含过(优点:安全; 缺点:效率低)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值