文章目录
基础语法
php介绍
php是服务器端脚本语言。
在学习php之前,您需要对HTML和CSS有一定了解
为什么要使用php:
- PHP可以在不同平台上运行(Windows、Linux、Unix、Msc OS X等)
- PHP与目前几乎所有的正在被使用的服务器相兼容(Apache、Nginx、IIS等)
- PHP提供了广泛的数据库支持
- PHP易于学习,并可高效地运行于服务器段
基本的PHP语法
PHP脚本可以放在文档中的任何位置。
PHP脚本以<?php
开始,以?\>
结束:
<?php
//PHP代码
?>
PHP的默认文件扩展名是".php
"
PHP文件通常包含HTML标签和一些PHP脚本代码。
下面我们写一个PHP文件示例,它将向浏览器输出文本"Hello World!":
<h1>first PHP page</h1>
<?php
echo "Hello World!";
?>
同样的,PHP语句也是以分号";"结尾,输出语句为:echo和print
PHP的注释和C一样,这里不做赘述
变量
变量被用作我们储存信息的“容器”。其不必声明数据类型
$txt = "Hello World!";
PHP变量规则:
- 变量必须以
$
符号开始,后面紧跟着变量名 - 变量名必须以字母或下划线字符开始
- 变量名只能包含数字、字母、下划线且不含空格
- 变量名区分大小写
常量
PHP常量不需要加$
修饰符,设置常量,使用define()
函数:
define(string constant_name, mixed value, case_sensitive = true)
- constant_name:必选参数,常量名称(即标识符)
- value:必选参数,常量的值
- case_sensitive:可选参数,指定是否对大小写敏感,设定为true表示不敏感
下面创建一个不区分大小写的常量,其值为"1tachi":
<?php
define("csdn","1tachi",true);
echo csdn;
?>
数据类型:
PHP支持的数据类型有:String(字符型)、Integer(整型)、Float(浮点型)、Boolean(布尔型)、Array(数组)、Object(对象)、NULL(空值)
空值和布尔型不区分大小写
- 布尔型
<?php
$s = true;
?>
- 数组
<?php
$color = array("red" , "blue" , "green");
?>
- 对象
<?php
class Car {
var $color;
function Car($color = "red") {
$this -> color = $color;
}
function showColor() {
return $this -> color;
}
}
?>
- NULL值
<?php
$x = null;
?>
变量作用域
变量中的作用域是脚本中变量可被引用/使用的地方
- local
- global
- static
- parameter
局部和全局作用域
在函数外部定义的变量,拥有全局作用域。
除函数外,全局变量可以被脚本中任何部分访问,如果要在函数中访问全局变量,需要使用global
关键字。
<?php
$x = 5; //全局变量
function Test() {
$y = 10; //局部变量
echo "变量 y 为 $y";
echo "变量 x 为 $x";
echo "<br>"; //HTML内的换行标签
global $x;
echo "变量 x 为 $x";
}
?>
Static作用域
当一个函数完成时,它的所有变量通常会被删除,如果你希望某个局部变量不被删除,可以在第一次声明时使用static关键字:
<?php
function Test() {
static $x = 5;
echo $x;
$x++;
}
Test(); //output 5
Test(); //output 6
Test(); //output 7
?>
可变变量
在PHP中,我们可以用一个变量的值来指定另一个变量的名称:
<?php
$hello = 'world';
$world = "Hi!";
echo $$hello; //output 'Hi!'
?>
运算符
PHP的运算符与其他语言大同小异,这里只介绍不同:
并置
.
:作用是连接两个字符串
数组
在PHP中,array()函数用于创建数组,数组类型分为三种:
- 数值数组 :带有数字ID键的数组
- 关联数组 :带有指定的键的数组,每个键关联一个值
- 多维数组 :包含一个或多个数组的数组
数值数组
创建数值数组的方法有两种:
- 自动分配ID键
ID键从0开始
$color = array("red" , "blue" , "green");
- 人工分配ID
$color[0] = "red";
$color[1] = "blue";
$color[2] = "green";
下面使用自动分配的方法创建一个数组并打印
<?php
$color = array("red" , "blue" , "green");
echo "I like " . $color[0] . "," . $color[1] . "and" . $color[2] . ".";
?>
可以将不同数据类型整合到同一数组中:
<?php
$myArray[0] = "蜜桃臀";
$myArray[1] = "yyds";
$myArray[2] = "!";
?>
关联数组
关联数组是使用你分配给数组的指定的键的数组。
创建方法同样有两种:
$age = array("UZI"=>"24" , "faker"=>"25" , "Theshay"=>"21");
$age['UZI'] = "24";
$age['faker'] = "25";
$age['Theshy'] = "21";
多维数组
多维数组包含一个或多个数组。
数组的维数表示你需要选择元素的索引数。
对于二维数组,你需要两个索引来选择一个元素
对于三维数组,你需要三个索引来选择一个元素
下面创建一个包含3个数组的二维数组:
$lolID = array(
'first'=>array('Faker' , 'UZI'),
'second'=>array('Theshy' , 'Mlxg' , 'WeiXiao'),
'third'=>array('Bang' , 'Bin')
);
二维$lolID数组包含三个数组,它有两个索引:行和列。
echo $lolID['first'][1]; //output UZI
echo $lolID['second'][0]; //output Theshy
控制语句
控制语句与其他语言大同小异,这里只介绍foreach循环
foreach循环仅在数组上使用,用于循环遍历数组中的每个键/值对。
语法:
foreach (array as $value) {
//代码区
}
//或者
foreach (array as $key => $value) {
//代码区
}
第一个表达式循环获取出数组的每一个值;第二个数组循环获取出数字的键值对
下面演示了一个循环,该循环输出$names数组的键$key和值$value。
$names = array("UZI" => 24 , "faker" => 25 , "Theshay" => 21);
foreach ($names as $name => $age) {
echo $name . '年龄' . $age . '<br>';
}
//UZI年龄24
//faker年龄25
//Theshy年龄21
函数
在PHP中,有超过1000多个内建的函数。
函数是通过调用来执行的,你可以在页面的任何位置调用函数。
创建PHP函数
语法:
function functionName() {
//代码区
}
PHP函数规则:
- 函数的名称应该能表示它的功能
- 函数名称以字母或下划线开头
- 函数名不区分大小写
函数参数
信息可以通过变量传递给参数,它们和变量一样;参数在函数名后的括号内指定
下面创建了一个平方函数:
<?php
function square($num) {
echo $num * $num;
}
square(2); //output 4
?>
参数之间通过逗号分隔:
<?php
function addNum($num1, $num2, $num3) {
echo $num1 + $num2 + $num3;
}
addNum(1, 2, 3); //output 6
?>
默认参数
在定义函数时,可以为函数参数定义默认值。
<?php
function addNum($x = 2, $y = 4) {
echo $x + $y;
}
addNum(3, 6); //output9
addNum(3); //output 7
addNum(); //output 6
?>
设置默认参数时必须从最右边开始设置,传参时会从组左边开始赋值
函数返回值
return语句
函数可以使用return
语句返回值,return
会停止函数的执行,并返回调用代码
<?php
function sum($x , $y) {
$sum = $x + $y;
return $sum;
}
echo sum(1, 3); //output 4
?>
- 如果没有使用return则返回值为NULL
- 函数不能返回多个值,但可以返回数组Array实现类似的效果
- return语句是语言结构而不是函数,因此其参数通常不以括号括起,这样可以降低PHP负担
预定义变量及魔术常量
超全局变量
超全局变量是在全部作用域中始终可用的内置变量,这意味着他们在一个脚本的全部作用域中都可用。在函数和方法中无需执行global或$variable即可访问他们。
PHP的超全局变量是$_SERVER、$GLOBALS、$_REQUEST、$_POST、$_GET、$_FILES、$_ENV、$_COOKIE、$_SESSION
$_SERVER
$_SERVER是一个包含标题,路径和脚本位置等信息的数组。此阵列中的条目由Web服务器创建。
$_SERVER[‘SCRIPT_NSME’]返回当前脚本的路径:
<?php
echo $_SERVER['SCRIPT_NAME'];
//output "/test.php"
?>
$_SERVER变量:HTTP_HOST
$_SERVER[‘HTTP_HOST’]从当前请求头返回主机头:
<?php
echo $_SERVER['HTTP_HOST'];
//output "localhost"
?>
当你的服务器上有大量图像并需要将网站转移到令一台主机时,此方法可能会有用。
而不是更改每个图像的路径:创建一个”config.php“文件,它保存你的图像路径
<?php
$host = $_SERVER['HTTP_HOST'];
$image_path = $host.'/image/';
?>
在脚本中使用"config.php"文件:
<?php
require 'config,php';
echo '<img src="'.$image_path.'header.png" />';
?>
php表单
PHP中的$_GET和$_POST变量用于检索表单中的信息,比如用户输入
PHP表单处理
PHP会自动对来自HTML页面中的表单元素进行处理,使其在PHP脚本中生效。
下面包含了一个HTML表单,带有两个输入框和一个提交按钮
<html>
<body>
<form action="form.php" method="post">
Name:<input type="text" name="fname">
Age:<input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
action属性指定在提交表单时,将数据发送到名为:"form.php"的PHP文件。HTML表单元素具有名称,这将在使用PHP访问数据时使用。
表单内容的获取
当用户填写完上述表单并点击提交时,表单的数据会被送往名为"form.php"的PHP文件:
<html>
<body>
Welcome <?php echo $_POST["fname"];?>!<br>
You are <?php echo $_POST["age"];?>years old.
</body>
</html>
$_POST是超全局数组保存的键/值对。在键值对中,键是表单控件的名称,值是用户输入的数据。
$_POST变量
当HTTP POST请求的Content-Type是application/x-www-form-urlencoded
或multipart/form-data
时,会将变量以关联数组形式传入当前脚本。
当用户点击"Submit"时,URL如:
/post.php
"post.php"文件现在可以通过$_POST变量来收集表单数据
表单中的名称会自动成为$_POST数组中的键
$_GET变量
在PHP中,预定义的$_GET变量用于收集来自method="get"的表单中的值。
示例:
<html>
<body>
<form action="welcome.php" method="get">
Name:<input type="text" name="fname">
Age:<input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
当用户点击"Submit"按钮时,URL:/Welcome.php?fname=UZI&age=24
"welcome.php"文件现在可以通过$_GET变量来收集表单数据
表单中的名称会自动成为$_GET数组中的键:
Welcome <?php echo $_GET["fname"];?>.<br>
You are <?php echo $_GET["age"];?>years old!
$_COOKIE变量
cookie是由服务器发送到浏览器的变量。cookie通常是服务器嵌入到用户计算机中的小文本文件。每当同一台计算机通过浏览器请求页面时,就会发送这个cookie。
如何创建cookie
setcookie()函数用于设置cookie。
setcookie()函数必须位于<html>标签之前,必须在任何其他输出发送到客户端前对cookie进行赋值。
cookie的名称自动指定为相同名称的变量。例如,如果被发送的cookie名为"user",则会创建一个名为$user的变量,存储着cookie的值。
如果成功,该函数返回true,失败返回false
语法:
setcookie(name, value, expire, path, domain, secure)
参数 | 描述 |
---|---|
name | 必需。规定cookie的名称 |
value | 必须。规定cookie的值 |
expire | 可选。规定cookie的过期时间。time()+3600*24*30将设置cookie的过期时间为30天。如果这个参数没有设置,那么cookie将在session结束后(即浏览器关闭时)自动失效 |
path | 可选。规定cookie的服务器路径。如果路径设置为"/",那么cookie将在整个域名内有效,如果路径设置为"/test/",那么cookie将在test目录下及其所有子目录下有效。默认路径值是cookie所处的当前目录。 |
domain | 可选。规定cookie的域名。为了让cookie在example.com的所有子域名中有效,需要把cookie的域名设置为".example.com"。当把cookie的域名设置为www.example.com时,cookie仅在www子域名中有效 |
secure | 可选。规定是否需要在安全的HTTPS连接来传输cookie。如果cookie需要在安全的HTTPS连接下传输,则设置为TRUE。默认时FALSE |
储存示例
下面,我们将创建名为"user"的cookie,并为他赋值"Alex Porter"我们也规定了此cookie在一小时后过期:
<?php
setcookie("user" , "Alex Porter" , time()+3600);
?>
还有一种设置过期时间的方法:
<?php
$expire = time()+60*60*24*30;
$setcookie("user" , "Alex Porter" , $expire);
?>
过期时间为60秒60分24小时*30天
获取cookie
PHP中的$_COOKIE变量用于取回cookie的值。
下面我们取回了名为"user"的cookie的值,并把它打印在了页面上:
<?php
//打印一个cookie
echo $_COOKIE["user"];
//查看所有的cookies
print_r($_COOKIE);
?>
下面我们使用isset()函数来确认是否已设置了cookie:
<html>
<body>
<?php
if (isset($_COOKIE["user"])) {
echo "Welcome ".$_COOKIE["user"]."!<br>";
} else {
echo "Welcome guest!<br>";
}
?>
</body>
</html>
删除cookie
删除cookie时,应当使过期日期变更为过去的时间点。
<?php
//设置一个一小时前的过期日期
setcookie("user" , "" , time()-3600);
?>
$_SESSION变量
PHP session变量用于储存关于用户会话(session)的信息,或者更改用户会话(session)的设置。
session变量储存单一用户信息,并且对于应用程序中的所有页面都是可用的。
开始PHP Session
当把用户信息存储到PHP Session中之前,首先必须启动会话。
session_start()函数必须位于<html>标签之前
<?php
session_start();
//store session data
$_SESSION['views'] = 1;
?>
<html>
<body>
<?php
//retrieve session data
echo "Pageviews=".$_SESSION['views'];
?>
</body>
</html>
输出:Pageviews = 1
计数实例
下面创建了一个page-view计数器。isset()函数检测是否已设置"views"变量。如果已设置"views"变量,我们累加计数器。如果"views"不存在,则创建"views"变量,并把它设置为1:
<?php
session_start();
if(isset($_SESSION['views'])) {
$_SESSION['views'] = $_SESSION['views'] + 1;
} else {
$_SESSION['views'] = 1;
}
echo "Views=". $_SESSION['views'];
?>
不断刷新这个界面,views的值会加1,设计成页面计数器
销毁Session
使用unset()或session_destroy()函数
unset()函数用于释放指定的session变量:
<?php
session_start();
if(isset($_SESSION['views'])) unset($_SESSION['views']);
?>
session_destroy()函数用于彻底销毁session:
<?php
session_destroy();
?>
session_deftroy()将重置session,您将失去所有已存储的session数据。
文件操作
PHP文件处理
PHP在创建、阅读、上传和编辑文件等提供了许多功能。fopen()打开不存在的文件,则文件将被创建,如果该文件已打开则根据模式进行相关操作。
<?php
$file = fopen("welcome.txt" , "r");
?>
文件可能通过下列模式来打开:
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始。 |
r+ | 读/写。在文件的开头开始。 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
a | 追加。打开并向文件末尾进行写操作;如果文件不存在,则创建新文件。 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
x | 只写。创建新文件。如果文件已存在,则返回FALSE和一个错误。 |
x+ | 读/写。创建新文件。如果文件已存在,则返回FALSE和一个错误。 |
如果fopen()函数无法打开指定文件,则返回0(false)。
写文件
fwirte()函数将内容写入一个打开的文件中。
函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。
如果函数成功执行,则返回写入的字节数。如果失败,则返回FALSE。
语法
fwrite(file , string , length)
参数 | 描述 |
---|---|
file | 必须。规定要写入的打开文件 |
string | 必须。规定要写入打开文件的字符串 |
length | 可选。规定要写入的最大字节数 |
<?php
$file = fopen("test.txt" , "w");
$test = "Hello World!";
fwrite($file , $test);
fclose($file);
?>
用fclose()函数关闭文件
往文件中追加内容
当使用"a"模式附加到文件时,文件指针被放置在文件的末尾,确保在文件末尾添加所有新数据
<?php
$file = "test.txt";
$fh = fopen($file , 'a');
fwrite($fh , "Some text");
fclose($fh);
?>
读文件内容
fgets()逐行读取文件
fgets()函数用于从文件中逐行进行读取文件。
在调用该函数后,文件指针会被移动到下一行
语法:
fgets(file , length)
- file:必要。规定要读取的文件,文件指针必须是有效的,必须指向由**fopen()或fsockopen()**成功打开,并且还未有fclose()关闭的文件
- length:可选。规定读取的字节数,默认为1024字节。从file指向的文件中读取一行并返回长度最多为length-1字节的字符串。如果没有则返回FALSE
<?php
$file = fopen("welcome.txt" , "r") or exit("Unable to open file!");
//feof()函数检测是否已到达文件末尾(EOF)
while(!feof($file)) {
echo fgets($file)."<br>";
}
fclose($file);
?>
使用PHP file()函数
file()函数把整个文件读入一个数组中。
数组的每个元素都是文件中相应的一行,包括换行符在内。
语法:
file(path , include_path , context)
- path:必要。规定要读取的文件
- include_path:可选。值为"1"时,规定在include_path中搜寻文件
- context:可选。规定文件句柄环境,使用null时忽略该选项
<?php
$arr = file("test.txt");
print_r($arr);
?>
结果为:
Array (
[0] => Hello World!
[1] => w3cshool
[2] => csdn
)