简介

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]

  1. 长度:count()
  2. 合并数组:array_merge($arr1,$arr2)
  3. 添加数组元素:
    array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
    $array1[]=’d’;
    有键值的
    $array1[‘a4′]=’javasciprt’;
    array_unshift() 将传入的单元插入到 array 数组的开头,数组下标重新排序
    添加到指定位置 array_splice(数组,位置,删除几个,增加元素),添加到位置前面
  4. 删除元素
    unset() unset(\array1[0]);
    array_pop():将数组最后一个单元弹出(出栈)
    array_splice($array1, 3, 1);
    array_shift() 将array 的第一个单元移出并作为结果返回,数组下标重新排序
  5. 修改
    $array1[0]=’aa’;
    array_splice($array1, 3, 1,增加元素);
  6. 判断数组
    is_array()
  7. 搜索数组
    array_search在数组中搜索给定的值,如果成功则返回相应的键名
    in_array — 检查数组中是否存在某个值 如果找到指定的值则返回 TRUE,否则返回 FALSE 。in_array()是区分大小写的。
    array_key_exists()在给定的 key 存在于数组中时返回 TRUE
  8. 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
B
12
改变B不会影响A

引用赋值

$A=12
$B=22
$B=&$A //这是指针/变了
A==12
B==12
改变B会影响A

销毁变量

unset(),销毁后变为没定义的变量会被显示为null

动态变量名

变量值可以再做变量名

$A=B
$B=C
$$A=C

常量

常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。
常量名不需要加 $ 修饰符

  1. const
  2. 设置常量,使用 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 命名空间可以解决以下两类问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,以提高源代码的可读性。

命名空间(可以理解为创建文件夹)

定义:命名空间namespace,是指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目中可能出现的重名结构的问题
语法:namespace 空间名
作用:不同的空间可以有同名的结构,如:类,空间元素:函数,常量,类,不包括变量!!

子空间(子文件夹)

定义:命名空间内部再划分一个命名空间,让每个小空间独立起来
语法:
namespace 空间名
namespace 空间名\子空间

命名空间访问

非限定名称访问:直接访问空间元素的名字(只访问自己命名空间的元素)
限定名称访问:使用自己当前的子空间名字+ \ + 元素名字
完全限定名称访问:\ + 全局空间 + \ + 元素名字
a\fun1;
\demo\a\fun1;

引入

空间引入方式:use关键字
好处:不用谢空间名,直接进行访问
同时还要include,否则找不到

  1. 引入类:use 空间名\类名
  2. 引入函数:use function 空间名\函数名
  3. 引入常量:use const 空间名\常量名
    当引入元素时重名,通过 as 来起别名
    use 空间名\类名 as 别名
  4. 引入多个元素
    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();