# PHP学习(一) 基础语法

# 什么是PHP

PHP(外文名:PHP:Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开元脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,实用广泛,主要适用于Web开发领域。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速的执行动态网页。用PHP做出的动态页面与 其他编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

世界上最美的语言!

# PHP语法

# 基础语法

PHP 脚本可放置于文档中的任何位置。

PHP 脚本以 <?php 开头,以 ?> 结尾:

<?php
echo "Hello World!";
?>
1
2
3

PHP 文件的默认文件扩展名是 ".php"。

PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。

注意!!!PHP 语句以分号结尾(;)。PHP 代码块的关闭标签也会自动表明分号(因此在 PHP 代码块的最后一行不必使用分号)。

# 变量声明

<?php
	$x=5;
	$y=6;
	$z=$x+$y;
	echo $z;
?>
1
2
3
4
5
6

PHP 变量规则

  • 变量以 $ 符号开头,其后是变量的名称
  • 变量名称必须以字母或下划线开头
  • 变量名称不能以数字开头
  • 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
  • 变量名称对大小写敏感($y 与 $Y 是两个不同的变量) 注释:PHP 变量名称对大小写敏感!

# PHP 变量作用域

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

  • local(局部)
  • global(全局)
  • static(静态)

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

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

global 关键词用于在函数内访问全局变量。

<?php
	$x=5;
	$y=10;
	
	function myTest() {
	  global $x,$y;
	  $y=$x+$y;
	}
	
	myTest();
	echo $y; // 输出 15
?>
1
2
3
4
5
6
7
8
9
10
11
12

PHP 同时在名为 $GLOBALS[index] 的数组中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。

<?php
	$x=5;
	$y=10;
	
	function myTest() {
	  $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
	} 
	
	myTest();
	echo $y; // 输出 15
?>
1
2
3
4
5
6
7
8
9
10
11

通常,当函数完成/执行后,会删除所有变量。不过,有时我需要不删除某个局部变量。实现这一点需要使用static

<?php
	
	function myTest() {
	  static $x=0;
	  echo $x;
	  $x++;
	}
	
	myTest(); // 0
	myTest(); // 1
	myTest(); // 2

?>
1
2
3
4
5
6
7
8
9
10
11
12
13

然后,每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时所包含的信息。

注释:该变量仍然是函数的局部变量。

# isset方法

isset方法可以判断PHP变量有没有被声明

if(isset($aa)){
    echo $aa;
} else {
    echo "aa变量没有被声明";    //输出
}
1
2
3
4
5

# 引用外部文件

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

include 和 require 语句是相同的,除了错误处理方面:

  • require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
  • include 只生成警告(E_WARNING),并且脚本会继续

假设我们有一个名为 "footer.php" 的标准的页脚文件,就像这样:

<?php
echo "<p>Copyright © 2006-" . date("Y") . " W3School.com.cn</p>";
?>
1
2
3

如需在一张页面中引用这个页脚文件,请使用 include 语句:

<html>
<body>

<h1>欢迎访问我们的首页!</h1>
<p>一段文本。</p>
<p>一段文本。</p>
<?php include 'footer.php';?>

</body>
</html>
1
2
3
4
5
6
7
8
9
10

# 数组

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

  • 索引数组 - 带有数字索引的数组
  • 关联数组 - 带有指定键的数组
  • 多维数组 - 包含一个或多个数组的数组

索引数组

$cars=array("porsche","BMW","Volvo");
1

或者也可以手动分配索引:

$cars[0]="porsche";
$cars[1]="BMW";
$cars[2]="Volvo";
1
2
3

count() 函数用于返回数组的长度(元素数):

<?php
$cars=array("porsche","BMW","Volvo");
echo count($cars); // 3
?>
1
2
3
4

关联数组

$age=array("Bill"=>"35","Steve"=>"37","Elon"=>"43");
1

或者

$age['Bill']="63";
$age['Steve']="56";
$age['Elon']="47";
1
2
3

# json_encode方法

json_encode方法输出json格式的数据,例如

$arrayTest = array(0=> "苹果", 1=>"测试"); // 数组的定义方法
echo json_encode($arrayTest); // json_encode输出json格式
1
2

# PHP Session

PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

开始 PHP Session

在把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 html 标签之前:

<?php session_start(); ?>

<html>
<body>

</body>
</html>
1
2
3
4
5
6
7

存储 Session 变量

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

<?php
session_start();
// store session data
$_SESSION['views']=1;
?>

<html>
<body>

<?php
//retrieve session data
echo "Pageviews=". $_SESSION['views']; // 1
?>

</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

终结 Session

如果希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量:

<?php
unset($_SESSION['views']);
?>
1
2
3

也可以通过 session_destroy() 函数彻底终结 session:

<?php
session_destroy();
?>
1
2
3

# 处理请求

表单提交数据请求 index.php

<!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>form</title>
</head>
<body>
<form action="a.php" method="get">
<label>用户</label>
<input type="text" name="username">
<p>
<label>密码</label>
<input type="password" name="password">
</p>
<input type="submit" value="提交">
</form>


</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

a.php

<?php
header("Content-type: text/html; charset=utf-8");
if ($_REQUEST['username'] == "admin") {
    echo json_encode(array("msg"=>"登陆成功", "errorCode" => "ok"));
} else{
    echo json_encode(array("msg"=>"登录失败", "errorCode" => "no"));
}
?>
1
2
3
4
5
6
7
8

使用ajax请求 index.php

<!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>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>
<body>
<form action="a.php" method="get">
<label>用户</label>
<input type="text" name="username" id="username">
<p>
<label>密码</label>
<input type="password" name="password">
</p>
<input type="submit" value="提交" id="btn">
</form>
</body>
<script type="text/javascript">
    $('#btn').click(function(e){
        e.preventDefault();
        $.ajax({
            url:'a.php',
            data:{
                username:$('#username').val()
            },
            dataType:'json',
            type:'get',
            success:function(data){
                alert(data.msg);
            }
        })
    })
</script>
</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
33
34
35
36
37
38
39

a.php

<?php
header("Content-type: text/html; charset=utf-8");
if ($_REQUEST['username'] == "admin") {
    echo json_encode(array("msg"=>"登陆成功", "errorCode" => "ok"));
} else{
    echo json_encode(array("msg"=>"登录失败", "errorCode" => "no"));
}
?>
1
2
3
4
5
6
7
8

通过$_GET[]方法获取GET请求参数

通过$_POST[]方法获取POST请求参数

通过$_REQUEST[]方法可以获取GET和POST的请求参数

设置header头

header("Content-type: text/json;charset = utf-8");
1
更新时间: 11/8/2019, 4:51:43 PM