PHP入门指南:从小白到编程达人

推荐阅读

智能化校园:深入探讨云端管理系统设计与实现(一)
智能化校园:深入探讨云端管理系统设计与实现(二)


文章目录

  • 推荐阅读
    • PHP语法
      • 注释
      • 变量
      • 输出
      • 定界符
      • 数据类型
        • var_dump() 方法
      • PHP弱类型
        • 弱类型比较
        • 内置函数的参数的松散性
      • 常量
      • 运算符
        • 算术运算符
          • 取模运算
        • 赋值运算符
        • 字符串运算符
        • 递增/递减运算符
        • 比较运算符
        • 逻辑运算符
        • 数组运算符
      • 顺序语句
      • 条件语句
        • if语句
        • if-else语句
        • if....elseif....if语句
        • Switch语句
      • 循环语句
        • while循环语句
        • do...while 循环语句
        • for循环语句
        • foreach语句
      • 函数
        • 用户定义函数
        • 创建函数
        • 函数参数
        • 函数返回值
      • 数组
        • 创建数组
        • 索引数组
          • count() - 函数获得数组的长度
          • 遍历索引数组
        • 关联数组
          • 遍历关联数组
        • 数组排序
          • sort()-对数组进行升序排序
          • rsort()- 对数组进行降序排序
          • asort()-根据值对数组进行升序排序
          • arsort()- 根据值对数组进行降序排序
          • ksort() -根据键对数组进行升序排序
          • krsort() -根据键对数组进行降序排序
      • 超全局变量
        • $GLOBALS — 引用全局作用域中可用的全部变量
        • $_SERVER
        • $_REQUEST
        • $_GET
        • $_POST


在这里插入图片描述

PHP语法

PHP 脚本以 结束

<?php
// PHP 代码
?>

还有一些其他的格式,不过建议使用规范。
php文件默认扩展名“.php”

PHP语句是以分号结尾的(;),php代码块的关闭标签也会自动表明分号(即PHP代码块的最后一行不必使用分号。)

注释

注释作用是提供代码编辑者阅读,帮助理解代码。

//      这是 PHP 单行注释
#       这也是单行注释
/* */   这是PHP多行注释

变量

变量可以视为存储数据的容器。
PHP变量规则

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
PHP 没有声明变量的命令。
变量在第一次赋值给它的时候被创建:
$num=123;
$a="hello";
如果赋值为文本,要使用引号。
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

在PHP中,所有用户定义的函数名,方法名,类名和关键词(if ,else,echo)对大小写不敏感。

<?php
echo "hello";
Echo "hello";
ECHO "hello";
?>
这些语句等价。

但是在PHP变量中,所有变量名,常量名都对大小写敏感。

<?php
$num=1;
echo "$num";
echo "$Num";
?>
只会输出第一个语句。$num和$Num 为两个不同的变量。

PHP单引号和双引号的用法

  1. 在定义字符串时,可以使用单引号也可以使用双引号。
$a="ad";或者$b='a';合法
$c='afa";这个为非法字符。
在定义字符串时,只有最开始的字符串被分析器解析,若是双引号被解析,那么在双引号里可以包含任何其他字符。
$d="sad'af'faef";这个为合法字符串。
如果中间出现了双引号,那么就会被重新解析,如果要表示出双引号,可以加入转义字符“\(反斜线)”
"I do "this"things"这个正常解析为三段
转义输出双引号为,"I do\"this\"things"
  1. 字符串中的单双引号处理。

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

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

//Hello world! What a nice day!,在两个字符串中间插入了一个空格。


$num=a.''.c;
$num="a c";两个变量处理结果相同。

双引号的内容可以被解释和替换,但是单引号中内容却被当作普通字符,直接输出。
需要使用转义字符串时,使用双引号。
单引号在解析时,处理速度更快。

$num=2;
echo "num is $num";//num is 2;
echo 'num is $num';//num is $num;
echo 'num is $num\n';//  num is $num\n
echo "num is $num\n";// num is 2(同时换行);
打印二维数组$a中的某个元素。
echo "a= $a[$i][$j]";
这种表达会报错。改为
echo 'a='.$a[$i][$j];
或者 复杂变量用花括号括起来。 
echo "a={$a[$i][$j]}"
  1. 在sql语句中。

在插入数据库的SQL语句是采用单引号来定义字符串,如果要将一个含有单引号的字符串插入数据库,这个SQL语句就会出错。

PHP 变量作用域

  • local (局部作用域)
  • global (全局作用域)
  • static (静态作用域)
  • parameter (函数参数作用域)

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字,或者使用 $GLOBALS[index] 数组。

  • 函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
  • 函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问。

因此可以在不同函数中创建相同的局部变量名,但是局部变量只能在其中被创建它的函数识别。

<?php
$x=5; // 全局作用域
function myTest() {$y=10; // 局部作用域echo "<p>测试函数内部的变量:</p>";echo "变量 x 是:$x";echo "<br>";echo "变量 y 是:$y";
} 
myTest();
echo "<p>测试函数之外的变量:</p>";
echo "变量 x 是:$x";
echo "<br>";
echo "变量 y 是:$y";
?>

  • local关键字的使用

在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。

<?php
function test()
{$a = 15;echo "内部输出结果:" . $a;
}
echo "外部输出结果:" . $a;  // 无法访问变量 a
test();
?>
//
外部输出结果:
内部输出结果:15
  • global 的关键字的使用

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

<?php
$a=5;
$b=3;
function t2()
{echo $GLOBALS['a']-$GLOBALS['b'];  // 输出 2global $a,$b;$x=$a-$b;echo $x;
}
t2();
?>//输出两个2
  • static的关键字的使用

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,请在您第一次声明变量时使用 static 关键字,这样之后每一次调用该函数时,该变量将会保留函数前一次被调用时的值。

  • parameter关键字的使用

参数是通过调用代码将值传递给函数的局部变量。
关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变。

<?php
$a = 10;
$b = 5;
function test()
{$a = 15;$b = 5;$z = $a-$b;echo $z;
}
test();
function test1()
{global $a,$b;$a = 15;$b = 5;$z = $a-$b;echo PHP_EOL;echo $z;
}
test1();
function test2()
{global $a,$b;$z= $a-$b;echo PHP_EOL;echo $z;
}
test2();
?>
//结果都是10;

输出

echo 和 print 区别:

  • echo - 可以输出一个或多个字符串
  • print - 只允许输出一个字符串,返回值总为 1

echo /echo()
print /print()

echo "hello";
print "hello";

定界符

EOF(heredoc)

  1. 必须后接分号,否则编译通不过。
  2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  5. 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接。
<?php
$name="变量会被解析";
$a=<<<EOF
$name<br><a>html格式会被解析</a><br/>双引号和Html格式外的其他内容都不会被解析
"双引号外所有被排列好的格式都会被保留"
"但是双引号内会保留转义符的转义效果,比如table:\t和换行:\n下一行"
EOF;
echo $a;
?>

  • .PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西;
  • 2.在 PHP 定界符 EOF 中的任何特殊字符都不需要转义;

数据类型

php 数据类型

  • String(字符串)
  • Integer(整型)
  • Float(浮点型)
  • Boolean(布尔型)
  • Array(数组)
  • Object(对象)
  • NULL(空值)
  • Resource(资源类型)
<?php 
$a = "字符串类型";
$b = 1234;//整形
$c = -3.1415;//浮点型
$d = 8E-3;
$e = true;//boolean类型
$f = array("A","B","C");//数组类型
class obj{//php对象的声明var $num;function name() { }
}
$o = new obj();//对象实例化类型
$g = NULL;//NULL
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);
var_dump($f);
var_dump($o);
var_dump($g);
?>


var_dump() 方法

var_dump() 方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

PHP弱类型

弱类型比较

弱类型的语言对变量的数据类型没有限制,你可以在任何地时候将变量赋值给任意的其他类型的变量,同时变量也可以转换成任意地其他类型的数据。

$a=1;
$a="abc";
$a=array();

比较操作符
类型转换
类型相同不会进行转换,直接比较。

在$a==$b的比较中
$a=null;$b=flase ; //true
$a='';$b=null; //true
==:先将字符串类型转化成相同,再比较
===:先判断两种字符串的类型是否相等,再比较
字符串和数字比较使用==时,字符串会先转换为数字类型再比较
0 =='0' //true
0 == 'abcdefg' //true
0 === 'abcdefg' //false
1 == '1abcdef' //true
var_dump('a123' == 123);//false,因为php中有这样一个规定:字符串的开始部分决定了它的值,如果该字符串以合法的数字开始,则使用该数字至和它连续的最后一个数字结束,否则其比较时整体值为0。
举例:
var_dump('123a1' == 123);//true
var_dump('1233a' == 123);//false

<、>、<=、>=都存在和相同的弱类型,原理相同
当字符串与数字使用
进行比较时,会将字符串类型转换成数字型再进行比较(如果两边都是字符串,则双方都转换为数字型),只比较转换后的数值的大小.
字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

var_dump('0e170' == '0e180');
//true//分析:因为字符串中含有e开头的值,那么php代码会将其整体看成科学记数法,最后0的170次方==0的180次方,即0==0,所以成立
var_dump(0 === 'root');
//false//分析:=== 在进行比较的时候,会先判断两边类型是否相等,这里数值和字符串类型明显不等,因此不成立
var_dump ("0e830400451993494058024219903391" == 0);
//true//分析:先将字符串0e830400451993494058024219903391转化成和0同等类型即数字型,因为字符串开始有合法数值,则字符串0e830400451993494058024219903391转换为0,最后0==0,所以成立。
var_dump ("0e830400451993494058024219903391" == "0e830400451993494058024219904444");
//true//分析:先将字符串0e830400451993494058024219903391与0e830400451993494058024219904444分别转化成数字型,因为两个字符串开始都有合法数值,则字符串0e830400451993494058024219903391转换为0,字符串0e830400451993494058024219904444转换为0,最后0==0,所以成立。

就是如果字符串中出现的".“或"e"或"E”,那么,此类字符串和数字进行比较时,会有所区别。

var_dump("123.2abc"==123);//false
var_dump("123.2abc"==1232);//false
var_dump("123e2abc"==123);//false
var_dump("123E2abc"==123);//false
.就表示了浮点数,e和E表示了科学计数法

Hash 比较

"0e132456789"=="0e7124511451155" //true
"0e123456abc"=="0e1dddada" //false
"0e1abc"=="0" //false

在进行比较运算时,如果遇到了0e\d+这种字符串,就会将这种字符串解析为科学计数法。所以上面例子中2个数的值都是0因而就相等了。如果不满足0e\d+这种模式就不会相等。

\d+表示1个或多个0到9的数字

十六进制转换

"0x1e240"=="123456" //true
"0x1e240"==123456 //true
"0x1e240"=="1e240" //false

当其中的一个字符串是0x开头的时候,PHP会将此字符串解析成为十进制然后再进行比较,0x1240解析成为十进制就是123456.

内置函数的参数的松散性

内置函数的松散性说的是,调用函数时给函数传递函数无法接受的参数类型。
md5()

md5()中的需要是一个string类型的参数。但是当你传递一个array时,md5()不会报错,只是会无法正确地求出array的md5值,这样就会导致任意2个array的md5值都会相等。

$array1[] = array("foo" => "bar","bar" => "foo",);
$array2 = array("foo", "bar", "hello", "world");
var_dump(md5($array1)==var_dump($array2)); //true

md5()函数不能处理数组,数组返回null,md5(a[ ])结果为null。
加密后以0e开头的值

QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e5093672134182067008420087635140e215962017
这个数加密前后皆以0e开头。可以绕过一些弱类型比较。

strcmp()
strcmp()函数在PHP官方手册中的描述是int strcmp ( string $str1 , string $str2 ) ,需要给strcmp()传递2个string类型的参数。
如果str1小于str2,返回-1,相等返回0,否则返回1。strcmp函数比较字符串的本质是将两个变量转换为ascii,然后进行减法运算,然后根据运算结果来决定返回值。

如果传入给出strcmp()的参数是数字呢?
$array=[1,2,3];
var_dump(strcmp($array,'123')); //null 在某种意义上null也就是相当于false。

switch()
如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型.

$i ="2abc";
switch ($i) {
case 0:
case 1:
case 2:
echo "i is less than 3 but not negative";
break;
case 3:
echo "i is 3";
}
//i is less than 3 but not negative

in_array()
在PHP手册中,in_array()函数的解释是bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) .
如果strict参数没有提供,那么in_array就会使用松散比较来判断haystack中。当strince的值为true时,in_array()会比较needls的类型和haystack中的类型是否相同。

$array=[0,1,2,'3'];
var_dump(in_array('abc', $array)); //true  'abc'==0
var_dump(in_array('1bc', $array)); //true  '1bc'==1

常量

常量值被定义后,在脚本的其他任何地方都不能被改变。
有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。

常量无需定义其作用域,自动就是全局的。

设置常量需使用define()函数,设置三个参数

  1. 首个参数定义常量的名称
  2. 第二个参数定义常量的值
  3. 可选的第三个参数规定常量名是否对大小写不敏感。默认是 false。
<?php
define("NIHAO", "欢迎");function myTest() {echo NIHAO;
}myTest();
?>
//欢迎

运算符

算术运算符
运算符名称例子结果
+加法$x + $y$x 与 $y 求和
-减法$x - $y$x 与 $y 的差数
*乘法$x * $y$x 与 $y 的乘积
/除法$x / $y$x 与 $y 的商数
%取模$x % $y$x 除 $y 的余数
<?php
$a=1;
$b=2;
echo ($a+$b);//3
echo ($b-$a);//1
echo ($a*$b);//2
echo ($b/$a);//2
echo ($b%$a);//0
?>

取模运算

取模运算的结果与和被除数的符号(正负)相同。
a a% ab的结果与$a相同。

echo (5 % 3)."\n";           
echo (5 % -3)."\n";       echo (-5 % 3)."\n";          echo (-5 % -3)."\n";

image.png

fmod()函数

float fmod ( float $x , float $y )

返回除法的浮点数余数。
返回被除数(x)除以除数(y)所得的浮点数余数。
余数(r)的定义是:x = i * y + r,其中 i 是整数。如果 y 是非零值,则 r 和 x 的符号相同并且其数量值小于 y。 其实实质就是x/y的浮点数余数。

<?php
$x = 5;
$y = 2;
echo '我是fmod($x, $y)输出的值:'.fmod($x, $y);
echo "\n";
echo '我是$x % $y输出的值:'.$x % $y;
echo "\n";
$a=5.8;
$b=2.5;
echo '我是fmod($a, $b)输出的值:'.fmod($a, $b);
echo "\n";
echo intval($a);
echo "\n";
echo intval($b);
echo "\n";
echo '我是$a % $b输出的值:'.$a % $b;
?>

image.png

%求余的时候,就是先把运算之前的被除数和除数都转换成整数(除去小数部分),之后在进行求余。

涉及到取模运算精度问题解析。

<?php
$n = 1.45;
$result = $n*100;
echo gettype($result);//double
echo "\n";
var_dump($result);//double(145)
echo "\n";
echo intval($n*100);//145
echo "\n";
echo $result%100;//45
echo"\n";
?>

image.png
这上面的结果比较正常,但是换个数就会有点惊奇。

<?php
$n = 8.45;
$result = $n*100;
echo gettype($result);
echo "\n";
var_dump($result);
echo "\n";
echo intval($n*100);
echo "\n";
echo $result%100;
echo"\n";
?>

image.png
是不是结果有些出乎意料。

这主要是PHP遵循IEEE754双精度,由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这也就造成了混乱的结果。

<?php $f= 8.45; var_dump(intval($f* 100)); //输出844 ?>

intval()函数采取的是截断法取整。同时看下图,就清楚了为啥.

echo intval(8.45*100);//844
echo intval(1.45*100);//145

image.png
image.png
IEEE-754 Floating Point Converter

赋值运算符

PHP 中基础的赋值运算符是 “=”。
这意味着右侧赋值表达式会为左侧运算数设置值。

赋值等同于描述
x = yx = y右侧表达式为左侧运算数设置值。
x += yx = x + y
x -= yx = x - y
x *= yx = x * y
x /= yx = x / y
x %= yx = x % y模数
<?php 
$x=17; 
echo $x; // 输出 17$y=17; 
$y += 8;
echo $y; // 输出 25$z=17;
$z -= 8;
echo $z; // 输出 9$i=17;
$i *= 8;
echo $i; // 输出 136$j=17;
$j /= 8;
echo $j; // 输出 2.125$k=17;
$k %= 8;
echo $k; // 输出 1
?>

字符串运算符
运算符名称例子结果
.串接$txt1 = “Hello” $txt2 = $txt1 . " world!"现在 $txt2 包含 “Hello world!”
.=串接赋值$txt1 = “Hello” $txt1 .= " world!"现在 $txt1 包含 “Hello world!”
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // 输出 Hello world!$x="Hello";
$x .= " world!";
echo $x; // 输出 Hello world!
?>

递增/递减运算符
运算符名称描述
++$x前递增$x 加一递增,然后返回 $x
$x++后递增返回 $x,然后 $x 加一递增
–$x前递减$x 减一递减,然后返回 $x
$x–后递减返回 $x,然后 $x 减一递减
<?php
$x=17; 
echo ++$x; // 输出 18$y=17; 
echo $y++; // 输出 17$z=17;
echo --$z; // 输出 16$i=17;
echo $i--; // 输出 17
?>

比较运算符

PHP 比较运算符用于比较两个值(数字或字符串):

运算符名称例子结果
==等于$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。
>大于$x > $y如果 $x 大于 $y,则返回 true。
<小于$x < $y如果 $x 小于 $y,则返回 true。
>=大于或等于$x >= $y如果 $x 大于或者等于 $y,则返回 true.
<=小于或等于$x <= $y如果 $x 小于或者等于 $y,则返回 true。
<?php
$x=17; 
$y="17";var_dump($x == $y);//true
echo "<br>";
var_dump($x === $y);//false
echo "<br>";
var_dump($x != $y);//false
echo "<br>";
var_dump($x !== $y);//true
echo "<br>";$a=17;
$b=8;var_dump($a > $b);//true
echo "<br>";
var_dump($a < $b);//false
?>

具体比较可以参照本文的PHP弱类型比较。

逻辑运算符
运算符名称例子结果
and$x and $y如果 $x 和 $y 都为 true,则返回 true。
or$x or $y如果 $x 和 $y 至少有一个为 true,则返回 true。
xor异或$x xor $y如果 $x 和 $y 有且仅有一个为 true,则返回 true。
&&$x && $y如果 $x 和 $y 都为 true,则返回 true。
||$x || $y如果 $x 和 $y 至少有一个为 true,则返回 true。
!!$x如果 $x 不为 true,则返回 true。

在PHP中,&&与and都表示逻辑与,||与or都表示逻辑或,并且它们都是短路运算符。但是两者的区别在于其优先级不同。

运算符 and、=、&&的优先级为
&& >=>and

在以下代码中,
第一行代码将会先把TRUE 的值赋值给t1,忽略t2。
第二行代码中,会先进行&& 运算,在将结果FALSE 赋值t2.

<?php
$t1=true and false;//true
$t2=true && false;//false
var_dump($t1,$t2);
?>

运算符 ||,or,=优先级为
||>=>or

在以下代码中,
第一行代码,会先将FALSE赋值给t1,忽略TRUE。
第二行代码中,会先进行||运算,在赋值给t2.

<?php
$t1=false or true;//false
$t2=false || true;//true
var_dump($t1,$t2);
?>

数组运算符

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
$x = array("a" => "apple", "b" => "banana"); 
$y = array("c" => "orange", "d" => "peach"); 
$z = $x + $y; // $x 与 $y 的联合
var_dump($z);
var_dump($x == $y);
var_dump($x === $y);
var_dump($x != $y);
var_dump($x <> $y);
var_dump($x !== $y);
?>

image.png

顺序语句

所谓顺序结构就是自上而下一条一条执行,为什么是一条一条的,因为存储设备物理上是串行的,存储的指令也是一个一个摆放的。
它的执行顺序自上而下,一次执行。

<?php
$a=1;
$b=0;
$c=$a;
$a=$b;
$b=$c;
echo $a;
echo "\n";
echo $b;
?>

image.png

条件语句

条件语句用于基于不同条件执行不同的动作
在 PHP 中,我们可以使用以下条件语句:

  • if 语句 - 如果指定条件为真,则执行代码
  • if…else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
  • if…elseif…else 语句 - 根据两个以上的条件执行不同的代码块
  • switch 语句 - 选择多个代码块之一来执行

if语句

if 语句用于_在指定条件为 true 时_执行代码。

if (条件) {当条件为 true 时执行的代码;
}

if-else语句

if…else 语句_在条件为 true 时执行代码在条件为 false 时执行另一段代码_。

if (条件) {条件为 true 时执行的代码;
} else {条件为 false 时执行的代码;
}

if…elseif…if语句

if…elseif…else 语句来_根据两个以上的条件执行不同的代码_。

if (条件) {条件为 true 时执行的代码;
} elseif (condition) {在不符合前者条件的情况下,该条件为 true 时执行的代码;
} else {在前两者条件都不符合的情况下,该条件为 false 时执行的代码;
}
<?php
$t=25;if ($t<10) {echo "你好";
} elseif ($t<20) {echo "你能行";
} else {echo "加油";
}?>
//$t=5   ,输出 你好
//$t=15  ,输出 你能行
//$t=25  ,输出 加油 

Switch语句

switch 语句用于基于不同条件执行不同动作。

switch (expression)
{
case label1:expression = label1 时执行的代码 ;break;  
case label2:expression = label2 时执行的代码 ;break;
default:表达式的值不等于 label1 及 label2 时执行的代码;
}

工作原理:

  1. 对表达式(通常是变量)进行一次计算
  2. 把表达式的值与结构中 case 的值进行比较
  3. 如果存在匹配,则执行与 case 关联的代码
  4. 代码执行后,_break 语句_阻止代码跳入下一个 case 中继续执行
  5. 如果没有 case 为真,则使用 default 语句.

循环语句

在 PHP 中,我们有以下循环语句:

  • while - 只要指定条件为真,则循环代码块
  • do…while - 先执行一次代码块,然后只要指定条件为真则重复循环
  • for - 循环代码块指定次数
  • foreach - 遍历数组中的每个元素并循环代码块

while循环语句

while 循环在指定条件为 true 时执行代码块。

while (条件为真) {
要执行的代码;
}

<?php $x=1; 
while($x<=5) {echo "这个数字是:$x <br>";$x++;
} 
?>

image.png

do…while 循环语句

do {
要执行的代码;
} while (条件为真);

<?php 
$x=1; 
do {echo "这个数字是:$x <br>";$x++;
} while ($x<=5);
?>

do while语句,会在先执行行循环语句内的语句后,再次进行条件判断。
这意味着,该循环不论是否满足条件都会执行一次。

<?php 
$x=6;
do {echo "这个数字是:$x <br>";$x++;
} while ($x<=5);
?>

image.png

for循环语句

** for 循环执行代码块指定的次数。**
image.png

<?php
for($x=0;$x<=10;$x++){
echo "数字是:$x<br>";
}

image.png

foreach语句

foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。

foreach ($array as $value) {
code to be executed;
}

每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。

<?php 
$colors = array("red","green","blue","yellow"); foreach ($colors as $value) {echo "$value <br>";
}
?>

image.png

函数

用户定义函数
  • 除了内建的 PHP 函数,我们可以创建我们自己的函数。
  • 函数是可以在程序中重复使用的语句块。
  • 页面加载时函数不会立即执行。
  • 函数只有在被调用时才会执行。

创建函数

function functionName() {
被执行的代码;
}

函数名能够以字母或下划线开头(而非数字)。
函数名对大小写不敏感。

<?php
function say() {echo "nihao";
}say(); // nihao
?>

函数参数
  • 可以通过参数向函数传递信息。参数类似变量。
  • 参数被定义在函数名之后,括号内部。您可以添加任意多参数,只要用逗号隔开即可。
  • 如果设置了默认参数,在没有传入参数时,会自动调用默认值。

function functionName( 参数1,参数2,…) {
被执行的代码;
}

<?php
function say($name) {echo "nihao,".$name;
}say("Alice"); // nihao,Alice
?>

函数返回值
<?php
function sum($x,$y) {$z=$x+$y;return $z;
}echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>

image.png

数组

数组是特殊的变量,数组能够在单独的变量名中存储一个或多个值。

创建数组

array()函数用于创建数组。

image.png

索引数组

image.png

<?php
$names=array("Alice","Bob");
echo "you are".$names[0]."he is".$names[1];
?>

image.png

count() - 函数获得数组的长度

**count()**函数用于返回数组的长度。

<?php
$names=array("Alice","Bob");
echo cout($names);
?>

遍历索引数组

借助for循环,遍历输出索引数组的所有值。

<?php
$names=array("Alice","Bob");
$length=count($names);
for($i=0;$i<$length;$i++){
echo "name:".$names[$i];
echo "\n";
}
?>

image.png

关联数组

关联数组是使用您分配给数组的指定键的数组。

image.png

<?php
$names=array("He"=>"BOb","Her"=>"Alice");
echo "He is ".$names['He'];
?>

遍历关联数组

借用foreach循环语句,遍历并输出关联数组的所有值。

<?php
$names=array("He"=>"BOb","Her"=>"Alice");foreach($names as $x=>$x_value){echo "Key=".$x.",Value=".$x_value;echo "\n";}?>

image.png

数组排序

数组中的元素能够以字母或数字顺序进行升序或降序排序。

  • sort() - 以升序对数组排序
  • rsort() - 以降序对数组排序
  • asort() - 根据值,以升序对关联数组进行排序
  • ksort() - 根据键,以升序对关联数组进行排序
  • arsort() - 根据值,以降序对关联数组进行排序
  • krsort() - 根据键,以降序对关联数组进行排序

sort()-对数组进行升序排序

按照数字或者字母顺序进行升序

<?php
$names=array("BOb","Alice");
$length=count($names);
echo "排序前";
echo "\n";
for($i=0;$i<$length;$i++){
echo $names[$i];
echo "\n";
}
sort($names);echo "排序后";
echo "\n";
for($i=0;$i<$length;$i++){
echo $names[$i];
echo "\n";
}
?>

image.png

rsort()- 对数组进行降序排序
<?php
$names=array("BOb","Alice");
$length=count($names);
echo "排序前";
echo "\n";
for($i=0;$i<$length;$i++){
echo $names[$i];
echo "\n";
}
rsort($names);echo "排序后";
echo "\n";
for($i=0;$i<$length;$i++){
echo $names[$i];
echo "\n";
}
?>

image.png

asort()-根据值对数组进行升序排序
<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
asort($age);foreach($age as $x=>$x_value){echo "Key=" . $x . ", Value=" . $x_value;echo "<br>";}
?>

image.png

arsort()- 根据值对数组进行降序排序

image.png

ksort() -根据键对数组进行升序排序
<?php
$age=array("Bill"=>"28","Steve"=>"66","Elon"=>"47");
ksort($age);foreach($age as $x=>$x_value){echo "Key=" . $x . ", Value=" . $x_value;echo "\n";}
?>

image.png

krsort() -根据键对数组进行降序排序
<?php
$age=array("Bill"=>"28","Steve"=>"66","Elon"=>"47");
krsort($age);foreach($age as $x=>$x_value){echo "Key=" . $x . ", Value=" . $x_value;echo "\n";}
?>

image.png

超全局变量

PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

超全局变量在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量。

$GLOBALS — 引用全局作用域中可用的全部变量

$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP 在名为
$GLOBALS[index]
的数组中存储了所有全局变量。
变量的名字就是数组的键。

<?php 
$x = 30;
$y = 65; function addition() {$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}addition();
echo $z;
?>// 95

$_SERVER

** S E R V E R 这种超全局变量保存关于报头、路径和脚本位置的信息。 ∗ ∗ < b r / > _SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。**<br /> SERVER这种超全局变量保存关于报头、路径和脚本位置的信息。<br/>_SERVER 是一个包含诸如头部(headers)、路径(paths)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。

超级全局变量,在所有作用域中始终可用的内置变量。

在函数或方法中您不需要使用 global $_SERVER; 访问它,就如同使用 $HTTP_SERVER_VARS 一样。
$HTTP_SERVER_VARS 包含着同样的信息,但是不是一个自动全局变量。(注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 处理它们的方式不同。)

(在 PHP 4.1.0 及以后版本使用。之前的版本,使用$HTTP_SERVER_VARS。)

$_SERVER['PHP_SELF']          //返回当前执行脚本的文件名。
$_SERVER['SERVER_NAME']	      
//返回当前运行脚本所在的服务器的主机名(比如 www.w3schools.cn)。
$_SERVER['SCRIPT_FILENAME']	  //返回当前执行脚本的绝对路径。
$_SERVER['SCRIPT_URI']	      //返回当前页面的 URI。
$_SERVER['SCRIPT_NAME']	      //返回当前脚本的路径。
<?php 
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>

image.pngPHP 全局变量 - 超全局变量
PHP $_SERVER 全局变量

$_REQUEST

PHP $_REQUEST 用于收集 HTML 表单提交的数据。

<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form><?php 
$name = $_REQUEST['fname']; 
echo $name; 
?></body>
</html>

image.png

$_GET

PHP G E T 也可用于收集提交 H T M L 表单 ( m e t h o d = " g e t " ) 之后的表单数据。 ∗ ∗ < b r / > ∗ ∗ _GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据。**<br />** GET也可用于收集提交HTML表单(method="get")之后的表单数据。<br/>_GET 也可以收集 URL 中的发送的数据。

<html>
<body><a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a></body>
</html>
<html>
<body><?php 
echo "在 " . $_GET['web'] . " 学习 " . $_GET['subject'];
?></body>
</html>

image.png
image.png
image.png

$_POST

PHP P O S T 广泛用于收集提交 m e t h o d = " p o s t " 的 H T M L 表单后的表单数据。 _POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。 POST广泛用于收集提交method="post"HTML表单后的表单数据。_POST 也常用于传递变量。

<html>
<body><form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form><?php 
$name = $_POST['fname'];
echo $name; 
?></body>
</html>

image.png
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/233847.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python自动化办公之PDF拆分

今天我们继续分享真实的自动化办公案例&#xff0c;希望各位 Python 爱好者能够从中得到些许启发&#xff0c;在自己的工作生活中更多的应用 Python&#xff0c;使得工作事半功倍&#xff01; 需求 需要从 PDF 中取出几页并将其保存为新的 PDF&#xff0c;为了后期使用方便&a…

关于车规级齐纳二极管MMBZ5V6ALT1G 它又有什么作用?

MMBZ5V6ALT1G是一款双单片硅齐纳二极管专为需要瞬态过电压保护能力的应用而设计&#xff0c;它们适用于电压和ESD敏感设备&#xff0c;如计算机、打印机、商用机器、通信系统、医疗设备和其他应用。它们的双结共阳极设计仅使用一个封装即可保护两条独立的线路&#xff0c;该器件…

rtu水文专用(支持SL/T427-2021等大部分协议)

SRTU200 系列是一款集数据采集与 4G/NB-IoT、LoRa、GPS 等多种通信功能于一体的 多功能遥测终端机&#xff0c;该设备搭配丰富的采集控制接口&#xff0c;提供 RS232、RS485、以太网、模拟量 输入、开关量输入、开关量输出和继电器等。产品设计人性化&#xff0c;功能丰富&…

Mysql文件-笔记

我们小组技术分享mysql&#xff0c;给我表这块&#xff0c;这个知识呀 只要你想学 源源不断 源源不断&#xff0c;我其实想把我们组的分享都弄出来&#xff0c;偷偷的 嘘~ 表是特定实体的数据集合&#xff0c;关系型数据库模型核心&#xff0c;表逻辑存储和实现&#xff0c;物理…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中&#xff0c;一个漂亮的WPF导航界面不仅为用户提供视觉上的享受&#xff0c;更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍&#xff1a; 首先&#xff0c;引人入胜的首页界面是用户与软…

电子电器架构网络演化 —— 车载以太网TSN

电子电器架构网络演化 —— 车载以太网TSN 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

CSAPP cache lab - Optimizing Matrix Transpose

CSAPP cache lab part B 矩阵转置 矩阵转置是一种操作&#xff0c;它将矩阵的行和列互换位置&#xff0c;即将原始矩阵的行变为转置矩阵的列&#xff0c;将原始矩阵的列变为转置矩阵的行。转置操作可以通过改变矩阵的布局来方便地进行某些计算和分析。 假设有一个mn的矩阵A&…

【uniapp】调用阿里云OCR图片识别文字:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; 【阿里官方】高精版OCR文字识别【最新版】-云市场-阿里云 <template><view class"container"><!-- 选择图片 --><button click"imageO…

在win10和Linux上配置SSH 无密码登录

文章目录 一、用途二、在本地机器上使用ssh-keygen产生公钥私钥对1&#xff09;在Linux (或macOS) 上产生SSH公私钥的方法2&#xff09;在win10上产生SSH公私钥的方法a&#xff09;检查windows 本地是否安装有sshb&#xff09;在本地生成SSH密钥对&#xff08;公钥和私钥&#…

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步&#xff0c;API&#xff08;应用程序编程接口&#xff09;安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增&#xff0c;组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年&#xff0c;预计几个关键…

基于R语言(SEM)结构方程模型教程

详情点击链接&#xff1a;基于R语言&#xff08;SEM&#xff09;结构方程模型教程 01、R/Rstudio (2)R语言基本操作&#xff0c;包括向量、矩阵、数据框及数据列表等生成和数据提取等 (3)R语言数据文件读取、整理&#xff08;清洗&#xff09;、结果存储等&#xff08;含tidve…

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…

【gRPC学习】使用go学习gRPC

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 RPC是远程调用,而google实现了grpc比较方便地实现了远程调用,gRPC是一个现代的开源远程过程调用(RPC)框架 概念介绍 在gRPC中&#xff0c;客户端应用程序可以直接调用另一台计算机上的服务器应用程序上的方法&#…

Docker 部署后端项目自动化脚本

文章目录 开机自启动docker打包后端项目Dockerfile文件脚本文件使用 开机自启动docker systemctl enable docker打包后端项目 这里的项目位置是target同级目录 1.在项目下面新建一个bin目录 新建一个package.txt 写入下方代码后 后缀改为.bat echo off echo. echo [信息] 打…

迎接人工智能的下一个时代:ChatGPT的技术实现原理、行业实践以及商业变现途径

课程背景 2023年&#xff0c;以ChatGPT为代表的接近人类水平的对话机器人&#xff0c;AIGC不断刷爆网络&#xff0c;其强大的内容生成能力给人们带来了巨大的震撼。学术界和产业界也都形成共识&#xff1a;AIGC绝非昙花一现&#xff0c;其底层技术和产业生态已经形成了新的格局…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——点云空间圆拟合&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的Tools——>…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

物理机与vm文件共享与传输的设置方法

今天跟各位小伙伴&#xff0c;分享一下物理机与vm虚拟机文件共享与传输的设置方法&#xff0c;以供大家参考&#xff01; 一、物理机与虚拟机文件共享设置方法 第一步&#xff1a;先关闭虚拟机&#xff08;客户机&#xff09; 第二步&#xff1a;选择编辑虚拟机设置 第三步&am…

大数据机器学习深度解读决策树算法:技术全解与案例实战

大数据机器学习深度解读决策树算法&#xff1a;技术全解与案例实战 本文深入探讨了机器学习中的决策树算法&#xff0c;从基础概念到高级研究进展&#xff0c;再到实战案例应用&#xff0c;全面解析了决策树的理论及其在现实世界问题中的实际效能。通过技术细节和案例实践&…

stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度

一、朝向 英文中文front view正面Profile view / from side侧面half-front view半正面Back view背面(quarter front view:1.5)四分之一正面 prompt/英文中文翻译looking at the camera看向镜头facing the camera面对镜头turned towards the camera转向镜头looking away from …