Fork me on GitHub

PHP

PHP入门

What is PHP???

PHP是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用

是一种创建动态交互性站点的强有力的服务器端脚本语言

  • PHP: Hypertext Preprocessor –超文本预处理器

  • DNS

DNS (Domin Name System 域名系统) : 因特网上作为域名和 IP 地址相互映射的一个分布式数据库,能使用户更方便的访问互联网

域名解析

用户通过主机名,最终得到该主机名对应的 IP 地址的过程

步骤:

用户输入域名 localhost –> DNS (localhost 127.0.0.1) –> 服务器电脑

PHP基本语法

php脚本可以放置在文档任意位置

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

文本输出命令

echo & print

输出字符串可以包含HTML标签

echo 语句

echo - 可以输出一个或多个字符串

echo 输出样式

1
2
3
4
5
6
7
8
<?php
$txt = "学习PHP"
$arr = array('Jan', 'Ame', 'Chi');

echo $txt;
echo "我要 $txt";
echo "想去的国家{$arr[1]}";
?>

print - 只允许输出一个字符串,返回值为 1

如果字符串成功显示则返回true,否则返回false。

1
2
3
4
5
6
7
8
<?php
$txt = "学习PHP"
$arr = array('Jan', 'Ame', 'Chi');

print $txt;
print "我要 $txt";
print "想去的国家{$arr[1]}";
?>

比较

  • echo 输出速度比 print 快,echo 无返回值, print 返回值为 1

  • print $aprint "$a" 效果相同,echo 同理

  • print "text$a text"print "text $a text"print "text{$a}text" 都可以正常显示 $a 的值,不使用 {} 则 &a 之后必须有一个空格,echo 同理


文本注释

1
2
3
4
5
6
7
8
9
<?php
// PHP单行注释

/*
PHP
多行
注释
*/
?>


须知
  1. PHP中每个代码行必须以分号结束,以使指令集区分开来

PHP变量

PHP为一门弱类型语言,不必向 PHP 声明该变量的数据类型。

PHP 会根据变量的值,自动把变量转换为正确的数据类型。

1
2
3
4
5
6
7
<?php
$x=5;
$y=6;
$z=$x+$y;
$txt="Hello,World!"
echo $z;
?>

规则

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

PHP变量作用域

  • PHP 有四种不同的变量作用域:

    • local
    • global
    • static
    • parameter


局部与全局作用域

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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";
?>

global全局变量

函数内访问全局变量需要 global 关键字或者使用 $GLOBALS[index] 数组

  • global $x,$y;
1
2
3
4
5
6
7
8
9
<?php
$x=5;
$y=10;

function mytest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
?>
注意

在 php 中函数是有独立的作用域,所以局部变量会覆盖全局变量


Static作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除

1
2
3
4
5
6
function myTest()
{
static $x=0;
echo $x;
$x++;
}

每次调用该函数时,该变量将会保留着函数前一次被调用时的值,且该变量仍然是函数的局部变量。

参数作用域

参数是通过调用代码将值传递给函数的局部变量,并且在参数列表中声明的:
function mytest($x)

PHP 字符串变量

实例: 创建一个 txt 的字符串变量

1
2
3
4
<?php
$txt="Hello World!";
echo $txt;
?>

PHP 并置运算符 .

在 PHP 中,只有一个字符串运算符。

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

实例:

1
2
3
4
5
<?php
$txt1="Hello";
$txt2="World";
echo $txt1 . " " . $txt2;
?>

字符串函数

  1. strlen("string"):返回字符串的长度
  2. mb_strlen("字符串","utf-8"): 设置指定编码输出中文字符个数
  3. strpos("string","str"):在字符串内查找一个字符或一段指定的文本的位置,若未找到匹配,则返回 FALSE

PHP超级全局变量

PHP中预定义了几个超级全局变量(superglobals),这意味着它们在一个脚本的全部作用域中都可用。

$GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键

示例:

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
$x = 75;
$y = 25;

function addition()
{
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z;
?>

实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问

$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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'];
?>

这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些

$_REQUEST

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

示例: 用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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>

$_POST有类似的用法


PHP 常量

常量是一个简单值得标识符,不可以在脚本中改变

设置PHP常量

语法

bool define ( string $name , mixed $value [, bool $case_insentitive = false ])

解释

  • name:必选参数,常量名称,即标志符
  • value:必选参数,常量的值
  • case_insensitive:可选参数,如果设置为TRUE,该常量则大小写不敏感。默认是大小写敏感的

示例:

1
2
3
4
5
<?php
//不区分大小写的常量
define("Hello", "Keithxodoy", True);
echo Hello;
?>

注意事项
  1. 常量在定义后,默认是全局变量,可在任意脚本中使用

PHP EOF (heredoc)

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。

PHP 定界符 EOF 的作用就是按照原样,包括换行格式什么的,输出在其内部的东西

1
2
3
4
5
6
7
<?php
echo <<<EOF
<h1>标题</h1>
<p>段落</p>
EOF;
// 结束需要独立一行且前后不能空格
?>


1. 以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号
2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
4. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义。
5. 在 heredoc 中,变量不需要用连接符 ., 来拼接

补充:PHP_EOL 是一个换行符,兼容更大平台


PHP 数据类型

String Integer Float Boolean Array Object Null

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$x = "Hello ,world!";
$y = 520;
$z = 52.1;
$a = True;
$arr = array("1","2","3");
class obj
{
var $color;
function what_color() {
return $this->color;
}
}
$b = null;

拓展

判断变量类型:var_dump()

说明:var_dump() 方法,判断一个变量的类型与长度,并输出变量的数值,如果变量有值,则输出是变量的值,并返回数据类型。显示关于一个或多个表达式的结构信息,包括表达式的类型与值.

注意:用保证 var_dump 中的变量必须是存在的,如果变量不存在则返回 NULL.


PHP 运算符

以例子来理解

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$x=10;
$y=6;
echo ($x * $y); // 输出60 ,乘法
echo '<br>'; // 换行

echo ($x / $y); // 输出1.6666666666667 ,除法
echo '<br>'; // 换行

echo ($x % $y); // 输出4 ,取余
echo '<br>'; // 换行
?>

php7+ 新增整除运算符

示例:

1
2
3
<?php
var_dump(intdiv(10, 3));
?>

赋值运算符与算法运算符用法相同

  • PHP 递增/递减运算符
运算符 名称 描述
++$x 预递增 x 加 1,然后返回 x
$x++ 后递增 返回 x,然后 x 加 1
  • PHP 比较运算符
运算符 名称 描述 实例
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!==”5” 返回 true
x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true 5===”5” 返回 false
  • PHP 逻辑运算符
运算符 名称 描述
x and y 如果 x 和 y 都为 true,则返回 true
x or y 如果 x 和 y 至少有一个为 true,则返回 true
x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
x && y 如果 x 和 y 都为 true,则返回 true
`x y` 如果 x 和 y 至少有一个为 true,则返回 true
! x 如果x 不为 true,则返回 true
  • 三元运算符

语法格式

(expr1) ? (expr2) : (expr3)

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

(exp1)?: (expr3)

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

示例:

1
2
3
4
5
<?php
$test = "一段字符"
$username = $test ?: 'nobody';
echo $username, PHP_EOL;
?>

==> 一段字符

  • 组合比较符(PHP7+)

PHP7+ 支持组合比较符

示例:比价两个整型数的大小

1
2
3
4
5
<?php
echo 1 <==> 1; // 0
echo 1 <==> 2; // -1
echo 2 <==> 1; // 1
?>

  • 运算优先级
优先级 && > = > and ` > = > or` 括号优先运算

PHP 条件语句

PHp - if 语句

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

示例:

1
2
3
4
if (condition)
{
// 条件成立时执行代码块;
}

PHP - if…else 语句

在条件成立时执行一块代码,条件不成立时执行另一块代码

1
2
3
4
5
6
7
8
if (条件)
{
//条件成立时执行的代码;
}
else
{
//条件不成立时执行的代码;
}

PHP - if…elseif….else 语句

在若干条件之一成立时执行一个代码块

示例:

1
2
3
4
5
6
7
8
9
10
11
12
if (条件)
{
//if 条件成立时执行的代码;
}
elseif (条件)
{
// elseif 条件成立时执行的代码;
}
else
{
//条件不成立时执行的代码;
}

注意: elseif 和 else if 完全同效果,elseif 是 PHP 为 else if 专门做到容错版

PHP Switch 语句

如果希望有选择地执行若干代码块之一,可以使用 switch 语句

示例:判断n的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
switch (n)
{
case num1:
# code...
break;
case num2:
# code...
break;
default:
# code
// 如果 n 即不等于 num1 也不等于 num2 ,此处代码将会被执行;
}
?>

解释:。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行。default 语句用于不存在匹配(即没有 case 为真)时执行

PHP 循环

while循环
1
2
3
4
while (条件)
{
要执行的代码;
}
do…while 语句

do…while 语句会至少执行一次代码,然后检查条件,只要条件成立,就会重复进行循环。

语法:

1
2
3
4
5
do
{
要执行的代码;
}
while (条件);

for 循环

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

语法:

1
2
3
4
for (初始值; 条件; 增量)
{
要执行的代码;
}

foreach 循环

foreach 循环用于遍历数组。

语法:

1
2
3
4
foreach ($array as $value)
{
要执行代码;
}

实例: 输出x数组内的元素

1
2
3
4
5
6
7
<?php
$x=array("one","two","three");
foreach ($x as $value)
{
echo $value . "<br>";
}
?>


PHP数组

语法:
$arr=array();

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

  • 数值数组 - 带有数字 ID 键的数组,自动分配 ID 键(ID 键总是从 0 开始
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组

数值数组实例

1
2
3
4
5
<?php
$cars=array("BMW","Volvo","Toyota");
echo "one" .$cars[0]. "," .&cars[1]. "," .&cars[2]. ".";
echo count(&cars);
?>

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

1
2
3
4
5
for($x=0;$x<$count(&cars);$x++)
{
echo $cars[$x];
echo "<br>";
}

PHP关联数组

语法:

  • &age=array("TOM"=>"25","KIT"=>"21");
  • $age['TOM']="25"; $age['KIT']="21";

遍历关联数组

1
2
3
4
5
6
7
8
9
<?php
$age=array("TOM"=>"25","KIT"=>"21");

foreach($age as $x=>$x_value)
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>

PHP多维数组

多维数组是包含一个或多个数组的数组。

实例: 二维数组:

1
2
3
4
5
6
7
8
9
<?php

$cars = array
(
array("Volvo",100,96),
array("BMW",60,59),
array("Toyota",110,100)
);
?>


PHP print_r() 函数

print_r() 函数用于打印变量,以更容易理解的形式展示。

print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
PHP 版本要求: PHP 4, PHP 5, PHP 7

实例:

1
2
3
4
<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
?>

输出结果为:

1
2
3
4
5
6
7
8
9
10
11
12
Array
(
[a] => apple
[b] => banana
[c] => Array
(
[0] => x
[1] => y
[2] => z
)

)


PHP数组排序

概述

PHP - 数组排序函数

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

示例

1
2
3
4
5
<?php 
$numbers=array(4,6,2,22,11);
sort($numbers);
print_r($numbers);
?>

运行结果

1
2
3
4
5
6
7
8
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 11
[4] => 22
)


PHP 函数

在PHP中,提供了超过1000哥内建函数,这才是PHP真正强大的来源

创建函数

函数通过调用函数来执行

1
2
3
4
5
6
<?php
function functionName()
{
// 执行代码
}
?>

PHP 函数准则:

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

函数参数

在函数名后的括号内添加参数,而且一个函数可以有多个参数

示例:

1
2
3
4
5
6
7
<?php
function name($name)
{
echo "myname is" . $name;
}
name("keith");
?>

输出:myname is keith

函数返回值

如果让函数返回一个值,使用return语句

1
2
3
4
5
6
7
8
<?php
function add($x, $y)
{
$total = $x +$y;
return $total;
}
echo "1 + 5 = " . add(1,5);
?>

PHP 常见的疑问

双引号与单引号

  • 双引号

PHP允许我们在双引号串中直接包含字串变量,我们可以发现下面的两个字串的处理结果是相同的。

代码如下:

1
2
$full_name = $first_name . ' ' . $last_name; 
$full_name = "$first_name $last_name";

  • 单引号

单引号里是普通字符是啥就是啥

喜欢的可以对我打赏了哟~