php基础
简介
php是一种通用开源脚本语言。
在一个php文件中可以包括以下内容:
PHP文件可包含文本、HTML、JavaScript代码和PHP代码
PHP代码在服务器上执行,结果以纯HTML形式返回给浏览器
PHP文件的默认文件扩展名是”.php”
功能:
PHP可以生成动态页面内容
PHP可以创建、打开、读取、写入、关闭服务器上的文件
PHP可以收集表单数据
PHP可以发送和接收cookies
PHP可以添加、删除、修改您的数据库中的数据
PHP可以限制用户访问您的网站上的一些页面
PHP可以加密数据
环境配置
集成环境
phpstudy
编辑器
用notepad++写
将php代码放在小皮www的文件夹下,浏览器访问:localhost/文件名
或者用phpstorm我喜欢用这个,凑个全家桶
切换php运行环境
先下载一个php环境,在网站管理那里,把php环境先切换过去,再进行卸载,否则卸载不了
注释
//
/**/
基本语法
<?php 开始,以 ?> 结束
变量以$开头
echo 输出
字符串和变量的拼接用.
引号用双引号功能更强大
换行:echo “<br>”;
输出
一般
echo:字符串,数字
print_r:数组
var_dump:所有类型, 打印变量及值
变量类型
整型int
浮点型float
布尔bool true false
字符串string
数组array
NULL:只有一个值,null
资源:文件,resource
对象object
class obj{//php对象的声明
var $num;
function name() { }
}
$o = new obj();//对象实例化类型
整型与进制
$a = 120 //十进制
$a = 0b110 //二进制
$a = 0120 //八进制
$a = 0x120 //十六进制
使用echo输出时。默认输出为十进制
decbin() // 十进制转二进制
decoct() // 十进制转八进制
dechex() // 十进制转十六进制
bindec() // 二进制转十进制
bin2hex() //二进制转十六进制
字符串
$str[i]:索引
trim($str):去掉两边空格
strlen($str):字符串长度,中文数不准
strpos($str,$str1):返回str2第一次出现的位置
substr($str,开始索引位置,结束索引位置):截取字符
str_replace(要替换的值,替换成什么,替换哪个字符串) str_replace(“world”,”Shanghai”,”Hello world!”);
md5():MD5加密
数组
array()
索引:数组名[0]
- 长度:count()
- 合并数组:array_merge($arr1,$arr2)
- 添加数组元素:
array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
$array1[]=’d’;
有键值的
$array1[‘a4′]=’javasciprt’;
array_unshift() 将传入的单元插入到 array 数组的开头,数组下标重新排序
添加到指定位置 array_splice(数组,位置,删除几个,增加元素),添加到位置前面 - 删除元素
unset() unset(\array1[0]);
array_pop():将数组最后一个单元弹出(出栈)
array_splice($array1, 3, 1);
array_shift() 将array 的第一个单元移出并作为结果返回,数组下标重新排序 - 修改
$array1[0]=’aa’;
array_splice($array1, 3, 1,增加元素); - 判断数组
is_array() - 搜索数组
array_search在数组中搜索给定的值,如果成功则返回相应的键名
in_array — 检查数组中是否存在某个值 如果找到指定的值则返回 TRUE,否则返回 FALSE 。in_array()是区分大小写的。
array_key_exists()在给定的 key 存在于数组中时返回 TRUE - array_unique()去重复
遍历数组
for,或者foreach
foreach($age as $x=>$x_value)//关联数组的遍历方法
{
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
排序
方法:
sort() – 以升序对数组排序
rsort() – 以降序对数组排序
asort() – 根据值,以升序对关联数组进行排序
ksort() – 根据键,以升序对关联数组进行排序
arsort() – 根据值,以降序对关联数组进行排序
krsort() – 根据键,以降序对关联数组进行排序
关联数组
指定键值对
遍历:
<?php
$age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?>
类和对象
定义和访问
注意访问时是->
<?php
class person{
var $age=1;
var $name="hahah";
function fun1(){
$this->age++;
return $this->age;
}
}
$p=new person();
echo $p->fun1();
echo "<br>";
echo $p->name;
?>
构造函数
可以自定义传参
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
析构函数
对象使用后自动调用
function __destruct() {
print "销毁 " . $this->name . "\n";
}
继承
PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承
实例
class Child extends Parent {
// 代码部分
}
方法重写:
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
子类有就用子类的,子类没有就用父类的
访问控制
加在变量名或者函数前面
public(公有):公有的类成员可以在任何地方被访问。
protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
private(私有):私有的类成员则只能被其定义所在的类访问
变量作用域
local(局部)
global(全局)
static(静态)
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问
global全局作用域
函数内访问函数外的两种解决方法,其他函数内是不生效的,我喜欢第一种
方式一:函数内加global进行访问
<?php
$a =1;
function fun1(){
global $a;
echo $a;
}
echo fun2();
?>
方式二:函数内加global进行访问
访问$GLOBALS[‘变量名’]
static静态变量
在函数执行完后,变量值仍然保存,下次执行会使用上次改变后的值
实例:
function test(){
static $n=0;
$n++;
echo "调用了一次".$n."\n";
}
test();test();test();
?>
变量检测
是否存在
isset()函数:存在返回1,不存在返回0
注意:isset(null)==0
类型
gettype():返回变量类型
is_int()
is_float()
is_bool()
is_string()
is_array()
is_object()
is_null()
变量类型转换
字符串到数字
字符串到数字的转换,从左到右截取,直到碰到不合法的数字.截取出来的部分转成数字
‘12.5hello’+3=15.5
‘hhhh12.5hello’+3=3
数字到字符串
\(a=123
\)a=$a.’hello’
a==123hello
布尔值的判断
‘’
0
‘0’
0.0
false
null
array()
以上被当做false,其他为真
变量赋值
传值赋值
\(A=12
\)B=22
\(B=\)A
A12
B12
改变B不会影响A
引用赋值
$A=12
$B=22
$B=&$A //这是指针/变了
A==12
B==12
改变B会影响A
销毁变量
unset(),销毁后变为没定义的变量会被显示为null
动态变量名
变量值可以再做变量名
$A=B
$B=C
$$A=C
常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。
常量名不需要加 $ 修饰符
- const
- 设置常量,使用 define() 函数
define(a,b,c)
第一个参数名称
第二个参数常量的值
第三个参数是true或者false:true对大小写不敏感,false对大小写敏感,默认就是false,可以不写
实例
define("CL", "这是一个全局常量", true);
echo CL; // 默认false,变量名区分大小写
预定义常量
__FILE__当前正在处理的脚本文件名
__LINE__正在处理的脚本文件的当前行数
PHP_VERSION:当前PHP预处理器的版本,如5.4.16
PHP_OS: PHP所在的操作系统的类型。如Linux。
DIRECTORY_SEPARATOR: 表示目录分隔符,UNIX或Linux操作系统环境时的值为“ / ”, Window操作系统环境时的值为 “ \ ”。
转义字符
在单引号中,只认识2个转义,\ ‘=> ‘, \ \=>\
而双引号中,认识的转义多,如”,\n(换行),”\t”(tab制表符)等等
运算符
算数:加减乘除
比较:大于,小于,等于,完成等于,大于等于,小于等于,不等于,结果是布尔值,true,false
三元: ? :
逻辑:and,$$ or,|| ! 异或xor
递增递减:++$x,$x++,–$x,$x–
字符串:拼接.
赋值:等于,加等于,减等于,乘等于,除等于,取余等于
流程控制
判断
if
if else
if elseif else
switch
避免if elseif else那种冗余难读的结构
$favfruit="orange";
switch ($favfruit) {
case "apple":
echo "Your favorite fruit is apple!";
break;
case "banana":
echo "Your favorite fruit is banana!";
break;
case "orange":
echo "Your favorite fruit is orange!";
break;
default:
echo "Your favorite fruit is neither apple, banana, or orange!";
}
?>
循环结构
while
do while
for
<?php
for ($x=0; $x<=10; $x++) {
echo "数字是:$x <br>";
}
?>
foreach
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
函数
参数还可以带默认值
<?php
function familyName($fname,$year) {
echo "$fname Zhang. Born in $year <br>";
}
familyName("Li","1975");
familyName("Hong","1978");
familyName("Tao","1983");
?>
匿名函数
没有函数名
$a=function(){
return 123;
}
echo $a();
回调函数
call_user_func()
function fun1($num=1234){
return $num;
};
echo call_user_func('fun1',567);
接口
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有,这是接口的特性。
要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
实例:
<?php
interface jiekou{
public function fun1($a);
public function fun2($b);
}
class num implements jiekou{
public function fun1($a){
echo $a;
}
public function fun2($b){
echo $b;
}
}
$c=new num();
$c->fun1(1);
echo "<br>";
$c->fun2(2);
?>
抽象类
任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
定义为抽象的类不能被实例化。
被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
实例
<?php
abstract class chouxiang
{
abstract public function fun1($a);
abstract public function fun2($b);
public function fun3($c)
{
echo "fun3";
}
}
class num extends chouxiang{
public function fun1($a)
{
echo $a;
}
public function fun2($b)
{
echo $b;
}
}
$d=new num();
$d->fun2(1);
echo "<br>";
$d->fun1(2);
echo "<br>";
$d->fun3(3);
?>
static关键字
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量\ $this 在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
<?php
class fu{
static $a="hello";
function fun1(){
echo self::$a;
}
}
$b=new fu();
echo fu::$a;
?>
final
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
超全局变量
PHP超级全局变量列表:
$GLOBALS 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
$_SERVER 一个包含了诸如头信息(header)、路径(path)、以及脚本位置(scriptlocations)等等信息的数组
$_REQUEST 用于收集HTML表单提交的数据。
它可以获取cookiegetpost
$_POST 广泛应用于收集表单数据,在HTMLform标签的指定该属性:”method=”post”。
$_GET 广泛应用于收集表单数据,在HTMLform标签的指定该属性:”method=”get”。
Array[]
$_FILES
$_ENV
$_COOKIE
$_SESSION
$GLOBALS:
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
PHP $_SERVER
元素/代码 | 描述 |
---|---|
$_SERVER[‘PHP_SELF’] | 返回当前执行脚本的文件名。 |
$_SERVER[‘GATEWAY_INTERFACE’] | 返回服务器使用的 CGI 规范的版本。 |
$_SERVER[‘SERVER_ADDR’] | 返回当前运行脚本所在的服务器的 IP 地址。 |
$_SERVER[‘SERVER_NAME’] | 返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。 |
$_SERVER[‘SERVER_SOFTWARE’] | 返回服务器标识字符串(比如 Apache/2.2.24)。 |
$_SERVER[‘SERVER_PROTOCOL’] | 返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。 |
$_SERVER[‘REQUEST_METHOD’] | 返回访问页面使用的请求方法(例如 POST)。 |
$_SERVER[‘REQUEST_TIME’] | 返回请求开始时的时间戳(例如 1577687494)。 |
$_SERVER[‘QUERY_STRING’] | 返回查询字符串,如果是通过查询字符串访问此页面。 |
$_SERVER[‘HTTP_ACCEPT’] | 返回来自当前请求的请求头。 |
$_SERVER[‘HTTP_ACCEPT_CHARSET’] | 返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1) |
$_SERVER[‘HTTP_HOST’] | 返回来自当前请求的 Host 头。 |
$_SERVER[‘HTTP_REFERER’] | 返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。 |
$_SERVER[‘HTTPS’] | 是否通过安全 HTTP 协议查询脚本。 |
$_SERVER[‘REMOTE_ADDR’] | 返回浏览当前页面的用户的 IP 地址。 |
$_SERVER[‘REMOTE_HOST’] | 返回浏览当前页面的用户的主机名。 |
$_SERVER[‘REMOTE_PORT’] | 返回用户机器上连接到 Web 服务器所使用的端口号。 |
$_SERVER[‘SCRIPT_FILENAME’] | 返回当前执行脚本的绝对路径。 |
$_SERVER[‘SERVER_ADMIN’] | 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。 |
$_SERVER[‘SERVER_PORT’] | Web 服务器使用的端口。默认值为 “80”。 |
$_SERVER[‘SERVER_SIGNATURE’] | 返回服务器版本和虚拟主机名。 |
$_SERVER[‘PATH_TRANSLATED’] | 当前脚本所在文件系统(非文档根目录)的基本路径。 |
$_SERVER[‘SCRIPT_NAME’] | 返回当前脚本的路径。 |
$_SERVER[‘SCRIPT_URI’] | 返回当前页面的 URI。 |
/ $_SERVER [‘PHP_SELF’] | 表示当前 PHP文件相对于网站根目录的位置地址 |
PHP $_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>
PHP $_POST
PHP $_POST 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据
<?php
$name = $_POST['fname'];
echo $name;
?>
PHP $_GET
PHP $_GET 也可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。
<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>
表单
<form action=”welcome.php” method=”post”>
action填入php地址(相对于网站根目录)
提交方式有两种,post,get
post更加安全
表单安全
防XSS:htmlspecialchars():htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
表单处理
通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
通过 PHP stripslashes() 函数删除用户输入数据中的反斜杠(\)
表单验证
是否填了必选的:empty()
preg_match() 函数检索字符串的模式,如果模式存在则返回 true,否则返回 false。
是否包含字母空格
是否包含@和.
等
多维数组
二维数组创建
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
二维数组的遍历
<?php
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}
?>
日期
date(format,timestamp)
format 必需。规定时间戳的格式。
timestamp 可选。规定时间戳。默认是当前时间和日期。
h – 带有首位零的 12 小时小时格式
i – 带有首位零的分钟
s – 带有首位零的秒(00 -59)
a – 小写的午前和午后(am 或 pm)
h – 带有首位零的 12 小时小时格式
i – 带有首位零的分钟
s – 带有首位零的秒(00 -59)
a – 小写的午前和午后(am 或 pm)
实例
<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
?>
设定时区
date_default_timezone_set(“Asia/Shanghai”);
创建日期
通过mktime() 创建日期
语法:
mktime(hour,minute,second,month,day,year)
实例:
<?php
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
?>
字符串转时间
strtotime() 函数用于把人类可读的字符串转换为 Unix 时间。
实例:
<?php
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
?>
<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>
文件
文件包含include和require
include 和 require 语句是相同的,除了错误处理方面:
通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件
require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
include 只生成警告(E_WARNING),并且脚本会继续,常用
实例:
include “phpinfo.php”;
文件判断
file_exists() 判断文件是否存在
is_file() 是否为文件
判断是否到达文件末尾
feof($myfile):到达底端返回1
文件创建
fopen(“testfile.txt”, “x”),不存在直接创建
文件打开
fopen() 的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式。如果 fopen() 函数未能打开指定的文件,下面的例子会生成一段消息:
打开方式:
模式 | 描述 |
---|---|
r | 打开文件为只读。文件指针在文件的开头开始。 |
w | 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。 |
a | 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。 |
x | 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。 |
r+ | 打开文件为读/写、文件指针在文件开头开始。 |
w+ | 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。 |
a+ | 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。 |
x+ | 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。 |
文件读取
fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数。
<?php
$myopen=fopen("demo.txt","a+");
echo fread($myopen,filesize("demo.txt"));
fclose($myopen);
?>
读取单行文件
fgets($myfile);
读取单个字符
fgetc($myfile);
文件关闭
fclose() 函数用于关闭打开的文件。
fclose($myfile);
另一种方法
readfile(),不需要打开关闭文件
readfile() 函数读取文件,并把它写入输出缓冲。
<?php
echo readfile("test.txt");
?>
文件写入
fwrite()
fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串。
实例
$myfile = fopen("newfile.txt", "a") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
文件属性
<?php
$file = 'test.txt';
file_exists($file) or die('文件不存在,程序退出!');
echo $file.' 文件大小是:'.filesize($file).' 个字节<br>';
if(is_readable($file)){
echo $file.' 文件是可读的。<br>';
}else{
echo $file.' 文件是不可读的。<br>';
}
if(is_writable($file)){
echo $file.' 文件是可写的。<br>';
}else{
echo $file.' 文件是不可写的。<br>';
}
if(is_executable($file)){
echo $file.' 文件是可执行的。<br>';
}else{
echo $file.' 文件是不可执行的。<br>';
}
echo '文件的创建时间是:'.date('Y-m-d H:i:s',filectime($file)).'。<br>';
echo '文件的修改时间是:'.date('Y-m-d H:i:s',filemtime($file)).'。<br>';
echo '文件上次的访问时间是:'.date('Y-m-d H:i:s',fileatime($file)).'。<br>';
?>
目录操作
新建目录:mkdir(路径,权限,递归创建)
删除目录:rmdir()
移动(改名):rename()
获取目录内容:
打开目录opendir()
读取目录readdir(目录句柄)
依次读取文件名,同时向下移动文件句柄指针,读取不到则返回false
关闭目录closedir()
<?php
$dir="d:/暗月/";
function tree($dir){
$dp = opendir($dir);
while(($file=readdir($dp))!==false){
if(is_dir("$dir{$file}")&&($file!=".")&&($file!="..")){
if(is_readable("$dir{$file}")) {
echo "目录$dir{$file}<br>";
tree("$dir{$file}");
}
else{
echo "没有权限打开";
}
}
else{
if(($file!=".")&&($file!="..")){
echo "文件$dir{$file}<br>";
}
}
}
closedir($dp);
}
tree($dir);
?>
命名空间
PHP 命名空间可以解决以下两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读性。
命名空间(可以理解为创建文件夹)
定义:命名空间namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目中可能出现的重名结构的问题
语法:namespace 空间名
作用:不同的空间可以有同名的结构,如:类,空间元素:函数,常量,类,不包括变量!!
子空间(子文件夹)
定义:命名空间内部再划分一个命名空间,让每个小空间独立起来
语法:
namespace 空间名
namespace 空间名\子空间
命名空间访问
非限定名称访问:直接访问空间元素的名字(只访问自己命名空间的元素)
限定名称访问:使用自己当前的子空间名字+ \ + 元素名字
完全限定名称访问:\ + 全局空间 + \ + 元素名字
a\fun1;
\demo\a\fun1;
引入
空间引入方式:use关键字
好处:不用谢空间名,直接进行访问
同时还要include,否则找不到
- 引入类:use 空间名\类名
- 引入函数:use function 空间名\函数名
- 引入常量:use const 空间名\常量名
当引入元素时重名,通过 as 来起别名
use 空间名\类名 as 别名 - 引入多个元素
use 空间名{
类名,
function 函数名,
const 常量
}
实例:
<?php
include "phpinfo.php";
use function demo\a\fun1;
fun1();
?>
文件上传
通过前端可以允许用户对文件的上传
要通过后端对上传的文件进行验证,保存
引入全局变量$_FILES
$_FILES[“file”][“name”] – 被上传文件的名称
$_FILES[“file”][“type”] – 被上传文件的类型
$_FILES[“file”][“size”] – 被上传文件的大小,以字节计
$_FILES[“file”][“tmp_name”] – 存储在服务器的文件的临时副本的名称
$_FILES[“file”][“error”] – 由文件上传导致的错误代码
引入函数检测文件是否存在:file_exists()
移动文件:move_uploaded_file():第一个参数是原文件的位置,第二个参数是要移动到的目录
完整实例:限制文件上传格式为gif/jpg, 上传后保存文件,上传成功后输出文件信息
异常处理
throw抛出异常
try中触发异常
catch捕获异常
php email
php异常处理
php error
实例
<?php
//创建可抛出一个异常的函数
function checkNum($number)
{
if($number>1)
{
throw new Exception("Value must be 1 or below");
}
return true;
}
//在 "try" 代码块中触发异常
try
{
checkNum(2);
//If the exception is thrown, this text will not be shown
echo 'If you see this, the number is 1 or below';
}
//捕获异常
catch(Exception $e)
{
echo 'Message: ' .$e->getMessage();
}
?>
cookie
介绍:
cookie是服务器发的用户的一个用于身份识别的文件,并且会保存在计算机里,当下次进行访问时,会同时发送给服务器,服务器解析cookie,来辨识用户身份
创建cookie
setcookie(name, value, expire); cookie名,cookie值,cookie存活时间,或者叫到期时间
setcookie() 函数必须位于 <html> 标签之前。
实例:
setcookie(“user”, “Alex Porter”, time()+3600);
输出cookie
利用全局变量
$_COOKIE[“user”]
删除cookie
setcookie(“user”, “”, time()-3600);
session
介绍
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。
启动回话
session_start()
session_start() 函数必须位于 <html> 标签之前:
存入session数据
通过全局变量来实现:$_SESSION
$_SESSION[‘test’]=1;
同样的这也可以读取
删除session
两种方法:unset(),session_destroy()
unset:删除变量,但是不会删除会话id
session_destroy():彻底删除,整个session什么都不剩
unset($_SESSION[‘views’]);
session_destroy();
本文来自博客园,作者:rabbitmind,转载请注明原文链接:https://www.cnblogs.com/rabbitmind/p/16518650.html