Fork me on GitHub

php基础学习

1、PHP基础语法

标准格式(XML格式)

1
2
3
<?php
// 代码块
?>

script 格式

1
2
3
<script language="php" >
echo date('Y-m-d H:i:s');
</script>

短格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?   短格式  ?>




/*
需要配置php.ini,默认未开启短格式

; http://php.net/short-open-tag
short_open_tag = Off
short_open_tag = On ----开启短格式标签

; Allow ASP-style <% %> tags.
; http://php.net/asp-tags
asp_tags = Off
asp_tags = On ----开启asp格式的标签

*/
  1. asp格式

1
<%  asp格式  %>

注释

1
2
3
// 单行注释

/* */ 多行注释

2、变量及操作

程序语言就是对内存进行操作(对内存进行读写操作)

概念

变量是内存中 用于临时存储数据的一个空间,这个空间有一个名字,就是这个变量名,变量名是用于对这个内存中的数据进行引用的。

声明

语法:$变量名 = 值

说明:

​ php中的变量必须参 $ 开头,变量名只能包含字母/数字/下划线,只能以字母,下划线开头。

示例:

1
2
3
4
$v1  = 1;
$v2 = 2;
$r = $v1 + $v2;
echo $r; // 输出 $r = 3

修改变量

1
2
3
4
5
$v1 = 10;	// 定义变量

$v1 = 20; // 修改变量

echo $v1; // 输出变量

删除变量

1
2
3
4
$v1 = 1;
echo $v1;

unset($v1); // 删掉变量,就是将变量从内存中销毁

可变变量

通过一个变量,访问另外一个变量

1
2
3
4
5
$v = 'age'; // 创建变量
$age = 20; // 变量赋值
echo $v; // 输出变量时,$v解析为 age

echo $$v; // 输出变量时,$$v解析为 $age 的值 20 (这就是可变变量)

通过一个变量,创建另外一个变量

1
2
3
$v = 'age';
$$v = 20; // 通过这个可变变量,创建了一个变量
echo $age; // 输出

预定义变量

PHP为我们预先定义了一组变量,这些变量会在不同的需求中使用

  • $_GET 用于接收 get 方式提交的数据
  • $_POST 用于接收 post 方式提交的数据
  • $_REQUEST 用于 get 或 post 方法提交的数据
  • $_SERVER 记录了服务器端与客户端的相关信息緟⚠
  • $_COOKIE 一种会话技术
  • $_SESSION 一种会话技术
  • $_FILES 用于记录用户上传的文件信息
  • $_GLOBAL 用于记录全局变量

3、内存原理(形象理解)

程序语言就是对内存进行操作的

内存结构

  1. 栈区

    保存变量点(术语称之为引用),

    特点:对于CPU来说,读写速度是最快的

  2. 堆区

    存储“复杂”的数据,数组/ 对象

  3. 数据段

    存储的是简单的数据,例如:整型、浮点型、布尔值

  4. 代码段

    存储的是源代码的对应的机器指令(人能看懂的计算机是看不懂的,必须经过转换)

  5. 输出缓存

    只要遇到输出指令,例如:echo 、print 、print_r、var_dump,这些指令都会将所有数据都放在 输出缓存中。

PHP执行过程

  1. 编译阶段
    1. 语法检查、词法检查、代码优化
    2. 编译通过后将源代码转换为机器指令

​ 特点:编译阶段错误的提示信息如下

1
2
Parse error : xxxxxxxxxxx
语法错误/ 引用错误 ....
  1. 执行阶段

    如果编译通过后,会将源代码对应的机器指令,保存在代码段,再开始执行代码段中的机器指令

  2. 程序执行结束

    输出缓存中的数据会自动返回给apache ,apche 自动返回给浏览器,同时会清除栈区中的内容,同时,数据段中的数据也会被系统销毁,代码段中的数据会销毁。

PHP嵌入到HTML的执行过程

当PHP功能模块在处理一个PHP文件时,它只关心PHP代码(使用PHP标签包含的代码)。对于非PHP代码它会原样输出。

PHP仅处理<?php ?>标签内的代码,js /html /css /对于PHP来说都是字符串

PHP中变量的传值方式

在PHP中变量有俩种传值方式:

1.赋值传值

​ 使用一个变量a为另一个变量b赋值时,传递的是变量a的值,这种赋值方式就是赋值传值。

1
2
3
4
5
6
7
<?php
$v1 = 10;
$v2 = $v1; // 将变量$v1的值赋值给变量$v2
$v2 = 20;
echo $v1; // 10

?>

2.引用传值

使用一个变量a 为另外一个变量b 赋值时,传递的是变量 a 的地址,这种赋值方式就是赋值传值

1
2
3
4
5
6
<?php
$v1 = 10;
$v2 = &$v1; // $v2 和 $v1 俩个地址指向的同一的堆空间,改变一个,俩都会改变
$v2 = 20;
echo $v1; // 20
?>

提示:js种不允许认为的更改传值的方式,但是php中可以使用地址符 “&”, 来将赋值传值,更改为引用传值(单向的)

4.常量

常量的概念

常量就是一种特殊的变量,也是用于存储数据,常量一旦定义就不允许修改其值,常量本身也不允许删除。

常量的定义

语法1:define(“常量名”,值)
1
2
define("PI", 123 );
echo PI;
语法2:const 常量名 = 值
1
2
const PE = '123';
echo PE;

说明:常量一旦定义就不允许更改

常量的值只能是基本数据类型(标量数据类型)

常量默认区分大小写,一般常量命名时,我们会大写形式。

定义区别 define VS const

define 语法可以在分支结构中定义常量,constant

1
2
3
4
if(true){
define('PI',2133); // 正确语法
const PI = 2133; // 错误语法
}

常量的判断及获取所有常量

  1. defined(常量名称);
1
2
3
4
5
6
// 定义一个常量
define("PI", 12345);

// 判断常量是否存在
$result = defined('PI');
var_dump($result);
  1. 获取所有的常量
1
2
3
4
5
// 获取所有常量
$return = get_defined_constants();
echo "<pre>"; // 换行
print_r($return);
echo "</pre>";// 换行

魔术常量

  • FILE 获取前文件夹名完整路径及文件名
  • DIR 获取前文件夹名的路径
  • LINE 获取代码行号
  • FUNCTION 获取当前函数的函数名
  • METHOD 获取当前方法的方法名
  • CLASS 获取当前类的类名
  • NAMESPACE 获取当前空间的空间名
1
2
3
4
// 魔术常量
echo __FILE__,"<br/>"; //获取前文件夹名完整路径及文件名
echo __DIR__,"<br/>"; //获取前文件夹名的路径
echo __LINE__,"<br/>"; //获取代码行号

5.数据类型

PHP数据类型分为三大类八小类

数据类型分类
  • 标量类型
    • int 整型
    • float 浮点类型
    • boolean 布尔类型
    • string 字符串
  • 复合类型:
    • array 数组
    • object 对象
  • 特殊类型
    • null null
    • resource 资源类型
整数(int)类型

线性的整数

十进制
1
2
$v1 = 255;
echo $v1; // 结果:255
八进制

以0开头,并且不能有超过7的数字

1
2
$v2 = 076;
echo $v2; // 结果:62
十六进制

以0开头,包含0-9, a()-f

1
2
$v3 = 0xFF;
echo $v3; // 结果:255
浮点类型

带有小数点的数,就是浮点数。

小数有俩中表达方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 普通方式
$v1 = 3.5;
echo($v1); // 3.5

// 科学计数法
$v2 = 1.32E+9;
echo($v2); // 1320000000


if (0.7-0.3 == 0.4) {
# code...
echo "yes";
}else{
echo "no";
}
// 注:请不要随意的比较俩个浮点数的大小
字符串(string)类型
使用单引号定义字符串
1
2
3
$str1 = 'hu \'feifei ';
// 能够被转义的符号有: \\ \
// 字符串中的变量不能被解析其值
使用双引号定义字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$str2 = "hu \"feifei";
/*
能够被转义的符号有:
\' -- 单引号
\" -- tab符
\t -- 双引号
\r -- 回车符
\n -- 换行符
\\ -- \
\$ -- $

*/


// 字符串中的变量 能被解析其值
$str3 = 202;
$str1 = "hufeifei $str3 "; // 结果:hufeifei 202
// 字符串中的变量不解析其值
$str3 = 202;
$str1 = "hufeifei /$str3 "; // 结果:hufeifei $str3
heredo 定义字符串

用于定义字符串,主要应用场景是定义大段的字符串非常方便。

1
2
3
4
$heredoc = <<<abc
// 代码块,可以是html标签。
adc;
// 开始标记,结束标记,必须相同。
转义符:\

用于将程序语言所赋予的某写字符的特殊功能转义掉。

输出不可见的符。

布尔(boolean)类型
true-成立
1
2
3
if(true){
// 条件成立执行
}
false-不成立
1
2
3
4
5
if(false){

}else{
// 条件不成立执行
}
数组(Array)类型
索引数组

​ 数组元素的下标是数值,这样的数组就是索引数组。

关联数组

​ 数组元素的下标是字符串,这样的数组就是关联数组。

数组元素的访问:
1
2
3
4
5
6
7
8
9
10
11
12
13
// 访问_SERVER数组中的下标为REMOTE_ADDR的元素
echo $_SERVER['REMOTE_ADDR'];

// 变量与字符串进行拼接--方式1
$h3 = "<h3>$_SERVER[REMOTE_ADDR]</h3>";
echo $h3;

// 变量与字符串进行拼接--方式2
$h3 = "<h3>{$_SERVER['REMOTE_ADDR']}</h3>";
echo $h3;

// 如果在一个字符串中想输出数组的元素,那么下标不需要加引号
// 如果使用{花括号}限制了数组,那么必须下标必须加引号
null(null)类型

null类型只有一个值,null

资源(resource)类型

resource类型,资源数据类型也是一个特殊的变量,程序员没有办法直接定义一个资源,必须使用PHP提供的获取资源的函数

1
2
3
4
5
// fopen('资源名称','打开方式') 获取资源函数
$fpen = fopen('date.txt', 'r');

// 读取资源内容
echo fgetc($fpen);

6.数据类型的转换

什么时候会出生数据类型的转换。

数据就是用于运算,当参与运算的俩个数据,类型不同时,PHP会自动进行转换。

有时候我们也会进行强制转换。

自动转换
1
2
3
$i = 100;
$l = '100元'; // 自动转换了
echo $i * $l; // 10000
强制转换
类型 说明
(integer) 将其他数据类型强制转换为整型
(float) 将其他数据类型强制转换为浮点型
(string) 将其他数据类型强制转换为字符型
(boolean) 将其他数据类型强制转换为布尔型
(array) 将其他数据类型强制转换为数组
(object) 将其他数据类型强制转换为对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$v1 = 10;
$v2 = 0;
$v3 = '';
$v4 = '0';
$v5 = [];
$v6 = null;
$v7 = 0.0;

// 强制转换为布尔值
$shuchu = (boolean) $v1; // true
$shuchu = (boolean) $v2; // false
$shuchu = (boolean) $v3; // false
$shuchu = (boolean) $v4; // false
$shuchu = (boolean) $v4; // false
$shuchu = (boolean) $v5; // false
$shuchu = (boolean) $v6; // false
$shuchu = (boolean) $v7; // false
var_dump ($shuchu);

// 0. 0.0 空字符 字符0 空数组 null 等同于布尔值 false的值。

数据及类型的判断

判断函数的格式规律

方法 说明
is_int(v)
is_string(v)
is_bool(v)
is_float(v)
is_scalar(v) 判断变量的类型是否是 int/string/bool/float
is_array(v)
is_object(v)
is_resourece(v)
is_null(v)
isset(v) 用于判断变量是否有设置值为 null
empty(v) 用于判断变量v 的值是否为”空”,布尔false的值都被empty认为是空。
如果是空则返回 “true”,
如果是不是空则返回”false”
/。 (空的返回true,不是空的返回false)

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$v1 = 10;
$v2 = 0;
$v3 = '';
$v4 = '0';
$v5 = [];
$v6 = null;
$v7 = 0.0;
$v8 = false;
$result = isset($v1); // true
$result = isset($v2); // true
$result = isset($v3); // true
$result = isset($v4); // true
$result = isset($v5); // true
$result = isset($v6); // false
$result = isset($v7); // true
$result = isset($v8); // true
var_dump($result);

7.运算符

赋值运算符

运算规则: 将赋值号右边的值赋值给左边的变量,左边必须是变量不能是式子。

1
2
3
4
$i = 10;
$a = 20;
$numb = $i + $a;
echo $numb; // 30
算数运算符

加减乘除 / 取余

运算规则: 取俩个数相除,余下的那个数。

1
2
3
4
 $a = 5;
$result = $a % 3 ;
echo "余数:" .$result;
echo "<br/>";
1
2
3
4
5
6
7
$i  = 5;
$result = $i % 3;
echo $result;

$result = $i / 3;
echo $result;
// 在实际开发中,我们经常使用%(取余)运算判断奇偶数。
自操作运算符
  • 自增运算符

    • 前自增

      规则:先对变量的值自增1,再使用变量的新值参与式子的运算

      1
      2
      3
      4
      5
      6
      $v = 10;
      $r = ++$v ;

      echo $r; // 11 先自增
      echo "<br/>";
      echo $v; // 11
    • 后自增

      规则:先使用变量的原值参与式子的运算,在对变量的值进行加1.

      1
      2
      3
      4
      5
      $v = 10;
      $r = $v++;
      echo $r; // 10
      echo "<br/>";
      echo $v; // 11 后自增
    • 综合练习

      1
      2
      3
      4
      5
      6
      7
      $v = 10;
      $re = $v + ++$v + $v++ + $v++ + $v++;
      // 11 + 11 + 12 + 13 + 14
      echo $re;

      // 说明: ++前 ,是先更改内存中的变量的值,再将新值读取到这个式子中。(先自增,再运算)
      // 后++ ,是先取内存中的这个变量的值,放在式子中,在对变量的值加1。(先运算,再自增)
  • 自减运算符

    • 前自减

      规则:先对变量的值自增1,再使用变量的新值参与式子的运算

    • 后自减

      规则:先使用变量的原值参与式子的运算,在对变量的值进行加1.

字符串运算符
1
2
3
4
5
6
7
$tab = "<table border='1' rules = 'all'>";
$tab .= "<tr>";
$tab .= "<td>1<td>-<td>3<td>-<td>4<td>-<td>5<td>-";
$tab .= "<tr>";
$tab .= "</table>";

echo $tab;

注意:

1
2
$str = '$i的值为:' . 10;  // 如果作为.来接收一个数值,数值与.之间要有空格
echo $str;
比较运算符
1
2
3
4
5
6
7
8
>
<
>=
<=
== 用于判断俩个数的值,是否相等
!= 判断值,如果不相同则返回true,如果相同则返回false
=== 同时判断变量的值与类型,是否相同。
!== 判断俩个变量的值或类型至少一方面不相同,就会返回true。如果都相同返回 false

提示:比较运算符,最终得到的结果是 boolean 类型的值。

逻辑运算符
&& 逻辑与
1
2
3
4
5
6
7
8
9
10
$v1 = true;
$v2 = false;
$v3 = true;
$v4 = false;

$result = $v1 && $v2; // false
$result = $v1 && $v3; // true
$result = $v2 && $v3; // false
$result = $v2 && $v4; // false
var_dump($result);

真值-运算规则:参与运算的俩个操作数,如果同时为true或能转换为true,那么最终结果就是true。

假值-运算规则:参与运算的俩个操作数,如果同时为false或能转换为false,那么最终结果就是false。

逻辑与短路
1
2
3
4
5
$v1 = true;
$v2 = false;
$n = 10;
$result = $v2 && ++$n;
var_dump($n);

逻辑与短路:根据逻辑与的假值运算规则,由于第1个操作数$v2值就是false,最终结果就为false,没有必要再计算第2个式子了,所以++n 并没有运行,形象称之为逻辑与短路。

and 逻辑与
1
运算规则与&&,运算规则相同,唯一区别是&& 的优先级高于 = ,而 and的优先级是低于 =
逻辑或 ||
1
2
3
4
5
6
7
8
9
$v1 = true;
$v2 = false;
$v3 = false;
$v4 = [];

$result = $v3 || $v1; // true
$result = $v2 || $v3; // false
$result = $v2 || $v4; // false
var_dump($result) ;

真值-运算规则:参与运算的俩个操作数,只要有一个为true或者能转换为true ,最终结果就为true。

假值-运算规则:参与运算的俩个操作数,全为false或能够转换为false,则结果为false。

逻辑或短路
1
2
3
4
5
$v1 = true;
$v2 = false;
$n = 10;
$result = $v1 || ++$n;
var_dump($n) ; // 10

逻辑与短路:根据逻辑与的假值运算规则,由于第1个操作数$v1值就是true,最终结果就为true,没有必要再计算第2个式子了,所以++n 并没有运行,形象称之为逻辑或短路。

or 逻辑或
1
运算规则与   || 运算规则相同,唯一的区别是 || 的优先级高于 = , 而or 优先级低于 =;
! 逻辑非
1
2
3
4
$v1 = true;
$v2 = false;
$re = !$v1; // $v1 = true
var_dump($re ) ; // $re = false (取反操作)

对操作数进行取反

$v = ?;

!!$v;

注释:上面代码是转换为布尔值。类似于强制转换

运算符的优先级:

在一个式子中可能会出现很多种运算符,但运算符之间有优先级。

运算口诀:单步 - 算术 - 关系 - 逻辑 - 条件 - 赋值 - 逗
三元运算符

语法:表达式?表达式A :表达式B

运算规则:先计算表达式是否成立,如果成立取表达式A的值,如果不成立取表达式B的值。就是简单的分支语句。

1
2
3
4
5
6
$v1 = 10;
$v2 = 20;
$v3 = 30;
$result = $v1 > $v2 ? $v1 : $v2;
$max = $result > $v3 ? $result : $v3;
echo $max;

扩展

语法: 变量?:表达式B

运算规则:如果变量能转换为true,那么就取变量,否则就取表达式b

1
2
3
$v1 = 10;
$result = $v1?:30;
echo $result;
错误控制运算符
@ 错误抑制符

不显示错误信息(避免暴露服务器地址用户名以及密码)

1
2
3
4
// 连接收数据库函数
$link = @mysqli_connect('182.61.150.128','feifei','feifei123456');
echo $link;
// 此错误信息不会显示
PHP.ini 隐藏信息错误

php.ini 全局配置文件中(display_errors = On)不显示错误

说明:这种配置影响全局,所有使用此份php的配置文件的站点都受到此影响

脚本级的错误控制

脚本级的错误控制仅限于当前的php脚本文件

ini_set() 主要用于php脚本中来设置php.ini中的配置项

语法:ini_set(配置项名,值);

1
2
// 设置配置值
ini_set('display_errors',"On");

ini_get() 主要是用于获取php.ini中配置项的值

1
2
// 获取配置值
echo ini_get('upload_max_filesize');
位运算符(了解)

8. PHP.exe

PHP内置的web服务器

php.cli

PHP 的命令行模式

php-m

查看PHP所有加载的功能模块

PHP—ini

配置文件信息

PHP -f 文件名

PHP -r “一行php命令”

9.进制转换函数

atc decimal 十进制

bin binary 二进制

oct octet 八进制

hex hex 十六进制

decbin() 十进制转换为二进制

dechex() 十进制转换为十六进制

decoct() 十进制转换为八进制

10.PHP中的输出语法

echo 只能输出变量数据类型,对于任何数据都要转换为字符输出, 没返回值。

var_dump() 主要用于程序员进行代码调试,输出十分详细的信息。(输出数据类型,以及值)

sprintf() 用于格式化输出

语法: sprintf(格式化字符串,变量1,变量2,…..)

说明:

1
格式化占位符有

%b 二进制

%d 十进制

%o 八进制

%f 浮点

%x 十六进制

1
2
3
4
5
6
7
8
9
echo sprintf('10 二进制为:%b',$v1);
echo "<br/>";
echo sprintf('10 八进制为:%o',$v1);
echo "<br/>";
echo sprintf('10 十进制为:%d',$v1);
echo "<br/>";
echo sprintf('10 十六进制为:%x',$v1);
echo "<br/>";
echo sprintf('10 浮点为:%.2f',$v1); // .x = 保留几位小数

11.流程控制

计算机中的流程控制可分为三种

顺序结构

程序自上而下的一个执行过程

分支结构

根据某一条件将程序转向不同的分支处执行

循环结构

计算机最大的特点计算速度快,计算机主要用于解决重复性的问题

12.分支结构

1
2
// 解决浏览器乱码问题
header('Content-type:text/html;charset=utf-8');

单分支

1
2
3
4
5
6
7
8
9
$sex = '男';
// $sex = $_GET['sex'];
if($sex == '男'){
echo '盛世潘安';
}
if($sex =='女'){
echo '沉鱼落雁';
}
// 能解决问题,但是存在效率问题。

双分支

1
2
3
4
5
6
7
$sex = 'mail';
// $sex = $_GET['sex'];
if($sex == '男'){
echo '盛世潘安';
}elseif($sex =='女'){
echo '沉鱼落雁';
}

多分支

1
2
3
4
5
6
7
8
9
10
$sex = 'mail';
// $sex = $_GET['sex'];
if($sex == '男'){
echo '盛世潘安';
}elseif($sex =='女'){
echo '沉鱼落雁';
}else {
# code...
echo '数据不合法,提示您,重新输入';
}

13.switchh 结构

当一个问题需要判断的条件比较多时,PHP又提供了一个switch分支结构。

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
$sex = 7;
switch($sex){
case 7:
echo '星期日';
break;
case 1:
echo '星期一';
break;
case 2:
echo '星期二';
break;
case 3:
echo '星期三';
break;
case 4:
echo '星期四';
break;
case 5:
echo '星期五';
break;
case 6:
echo '星期六';
break;
default:
echo '非法输入值!';
}

if vs switch 区别:

if结构的条件可以表示一个范围。

switch结构主要用于表示一个具体的值。

14.for循环

循环结构主要是用于解决重复性的问题.

1
2
3
4
5
6
7
8
9
// 语法
for(循环控制变量初始化; 表达式; 循环控制变量的更改; ){
// 循环体
}
//a. 首先执行循环控制变量初始化,这一步仅执行1次.
//b. 判断表达式是否成立,如果不成立直接结束循环体,继续其后的语句执行
//c. 如果成立,执行循环体
//d. 循环体执行结束后,执行循环控制变量的更改
//e. 往复执行b.c.d. 直到循环控制变量的值主表达式不成立时,结束循环结构

例如:

1
2
3
4
for( $i = 1;  $i <= 100; $i ++){
echo $i,'<br/>';
}
// 输出1-100的数

对于for循环结构,要求:

1.能够使用for循环,模拟任意次数的循环。

2.能够使用循环控制变量来模拟数据或数据规则(规律)

使用程序语言解决问题的思路:

1.首先要判断使用何种流程控制,

2.再将问题种的条件转换为计算机能够表达的式子

99乘法表格
1
2
3
4
5
6
7
8
9
10
11
// 外层循环,控制行
for($i = 1; $i <= 10; $i++){
echo "<tr>";
// 内层循环,控制列
for($j=1; $j<= $i; $j++){
echo "<td>{$i}</td>";
}
echo "</tr>";

}
echo "</table>";
课堂案例

百钱百鸡,100文钱,买100只鸡,公鸡5文1只,母鸡3文1只,小鸡1文3只

穷举法:

1
2
3
4
5
6
7
8
9
for($cock = 1; $cock <= 100; $cock++){
for($hen = 1; $hen <= 100; $hen++){
$count++;
$chick = 100 - $cock - $hen;
if($cock * 5 + $hen *3 + $chick /3 == 100){
echo "公鸡为:$cock 母鸡为:$hen 小鸡为:$chick<br/>";
}
}
}
计数器(循环次数)
1
2
3
4
5
6
7
8
9
10
11
$count = 0;
for($cock = 1; $cock <= 100; $cock++){
for($hen = 1; $hen <= 100; $hen++){
$count++;
$chick = 100 - $cock - $hen;
if($cock * 5 + $hen *3 + $chick /3 == 100){
echo "公鸡为:$cock 母鸡为:$hen 小鸡为:$chick<br/>";
}
}
}
echo '循环总次数:',$count ; // 循环了1万次
优化百钱百鸡
1
2
3
4
5
6
7
8
9
10
11
$count = 0;
for($cock = 1; $cock <= 16; $cock++){
for($hen = 1; $hen <= 29; $hen++){
$count++;
$chick = 100 - $cock - $hen;
if($cock * 5 + $hen *3 + $chick /3 == 100){
echo "公鸡为:$cock 母鸡为:$hen 小鸡为:$chick<br/>";
}
}
}
echo '循环总次数:',$count ; //循环了 464次, 我草,

while 循环

do…while循环

循环的结束与退出

continue 【n】

说明: 跳出当次循环

break【n】

说明: 直接结束循环

15.流程控制语句的标签语法

PHP在将PHP代码嵌入到html文档中,又提供了一种标签语法。

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
31
32
<?php
// 假数据库中获取到了数据
$data = [
[1,'笔记本电脑','mate',7000],
[2,'苹果手机','nav',3000],
[4,'苹果电脑','mate',8000],
[5,'小米笔记本','mate',6000]
];
?>

<body>
<table border='1'>
<thead>
<tr>
<td>ID</td>
<td>品牌</td>
<td>商品名</td>
<td>价格</td>
</tr>
</thead>
<tbody>
<?php for($i = 0; $i <= 5; $i++){?> // 标签语法
<tr>
<td><?php echo $data[$i][0]?> </td> // 数据
<td><?php echo $data[$i][1]?> </td> // 数据
<td><?php echo $data[$i][2]?> </td> // 数据
<td><?php echo $data[$i][3]?> </td> // 数据
</tr>
<?php }?> // 标签语法,这个PHP位置后面一定要有空格,不然报错。
</tbody>
</table>
</body>

if标签语法

1
2
3
4
5
6
7
<?php if(...){?>
// 标准写法..
<?php}?>

<?php if(...):?>
// 简化写法...
<?php endif?>

for标签语法

1
2
3
4
5
6
7
<?php for(){?>
// 标准写法..
<?php }?>

<?php for():?>
// 简化写法...
<?php endif?>

16.文件载入

介绍

在实际开发过程中,经常会在PHP文件中引入其他的文件,被引入的文件可以上html,也可以是PHP文件。

1.require
require(文件名)
1
2
3
4
5
6
7
8
9
10
11
12
13
// 03tese文件夹

require '04tese.php'; //载入文件
showInfo(); // 调用04tese 函数


// 04tese文件夹
function showInfo(){
echo __FUNCTION__;
}

// 函数可以先调用,再定义,不会报错。(只在当前文件夹内有效)
// 如果函数体在其他文件内,必须先载入文件,再调用函数(不然报错)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
// test.html文件(模版渲染文件)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table border='1'>
<thead>
<tr>
<td>ID</td>
<td>品牌</td>
<td>商品名</td>
<td>价格</td>
</tr>
</thead>
<tbody>
<?php for($i = 0; $i <= 3; $i++){?>
<tr>
<td><?php echo $data[$i][0]?> </td>
<td><?php echo $data[$i][1]?> </td>
<td><?php echo $data[$i][2]?> </td>
<td><?php echo $data[$i][3]?> </td>
</tr>
<?php }?>
</tbody>
</table>
</body>
</html>


// 05test.php文件(数据文件)
$data = [
[1,'hufeifei','mate',7000],
[2,'zhoujuanjuan','nav',3000],
[4,'shengge','mate',8000],
[5,'yongge','mate',6000]
];

require "test.html"; // 拷贝了test.html 所有文件到 php 文件中来了

require_once(文件名)

使用目的:

1.当前文件(PHP)有数据,想在被引用的文件(html)中显示。

2.当前文件(PHP)想使用,另外一个文件中(PHP)的功能性代码。

2.include
include (文件名)
1
2
3
4
5
6
7
8
9
// 文件A
function obj(){

}

// 文件B
include “文件A.php”;

obj(); //调用文件A 中的函数
include_conce(文件名)
3.引入路径问题
4.include与require 区别

5.DIR__ FILE

20.字符串

使用单引号或双引号扩起来的0个或多个字符。

单引号:

​ 不能解析变量的值,能够被转义的 \ \ —— \

双引号:

能够解析变量的值,都能被转义

heredoc 本质就是使用双引号定义大段的文本,只是另一种方式进行书写。

nowdoc 本质就是使用单引号定义大段的文本,只是另一种方式进行书写。