跳至主要內容

php基础教程

Moments大约 21 分钟

php基础教程


php入门

PHP被广泛运用在服务器上,做为CGI解析器使用,也可以使用php-cli做socket编程.

hello.php

<?php
echo 'Hello php!';
?>
// 命令行执行
php -f hello.php
// 服务器执行
php -S 127.0.0.1:8080
http://127.0.0.1:8080/hello.php
// 执行语句
php -r "echo 'Hello php!';"
// 交互执行语句
php -a
echo 'Hello php!';
exit

php安装

源码安装的话需要自己编译,在编译之前要安装好gc++之类的编译器,如果用的是centos系统可以直接yum安装.

// 安装EPEL YUM源
yum install epel-release yum-utils -y
// 会对系统类型安装相应的包
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
// 安装php81
yum install php81-php-fpm php81-php-xml php81-php-cli php81-php-gd php81-php-json php81-php-mysql php81-php-sqlite3 php81-php-bz2 php81-php-mbstring php81-php-zip -y
// 开启php服务
systemctl start php81-php-fpm.service
// 开启服务器,要外网访问ip地址不要限制
php81 -S 0.0.0.0:80

安装pecl

wget http://pear.php.net/go-pear.phar
php81 go-pear.phar
all
cp /opt/remi/php81/root/usr/bin/pecl /usr/bin/pecl
pecl version
pecl install xdebug // 这个版本还没有xdebug
pecl install swoole

php语法

php默认文件扩展名是.php.

指令分隔符是;.

php注释

  • 单行注释//,#
  • 多行注释/**

php大小写敏感

  • 用户自定义的函数,类,关键词都对大小写不敏感
  • 所有变量都对大小写敏感
  • 常量const对大小写敏感,define可以指定是否大小写敏感

php转义字符

\,如:\t,\r,\'

在字符串中输出变量名,使用花括号

$name = 'Moments';
echo "Hello {$name}\n";

语句include和require的区别是什么

require() // 无条件包含,如果文件不存在,会报出一个fatal error。脚本停止执行
include() // 有条件包含,如果文件不存在,会报出一个warning,但脚本会继续执行

Session, Cookie的区别

存储位置:Cookie存储在浏览器;Session存于服务器
存储类型:Cookie能存储字符串,数字,不能存储数组,对象;Session可以存储所有类型(除了资源)
存储大小不同:受浏览器的限制,不同浏览器对于Cookie的个数和大小,有限制
Session存储在文件上,因此可以存储较大的内容。
安全性:不能够直接信任Cookie数据,因为可以伪造,要加以验证。

各种服务的默认端口号

服务端口号
http80
https443
tomcat8080
mysql3306
ftp21
ssh22
telnet23
smtp25
php-fpm9000
memcached11211
redis6379
mongodb27017
sphinx9312

echo和print语句

  • echo, 可以输出一个或多个字符串
  • print, 只允许输出一个字符串,返回值总为1
  • echo是一个语言结构,使用的时候可以不加括号

php数据类型

四种标题类型

  • boolean,布尔型
  • integer,整型
  • float,浮点型
  • string,字符串型

三种复合类型

  • array,数组
  • object,对象
  • callable,回调类型

两种特殊类型

  • resource,资源
  • null,空类型

伪类型

  • mixed,混合类型
  • number, 数字类型
  • callback, 回调类型
  • array|object,数组|对象类型
  • void,空类型

类型的获取,检测,转换

  • gettype,获取变量类型
  • is_null,变量类型检测
  • settype,变量类型转换

进制表达示

$a = 1234; // 十进制
$a = -1234; // 负数
$a = 0123; // 八进制(等于十进制83)
$a = 0x1A; // 十六进制(等于十进制26)
$a = 0b11111111; // 二进制数字(等于十进制255)

字符串表达示

  • 单引号
  • 双引号
  • heredoc语法结构,类似双引号
  • nowdoc语法结构,类似单引号
// heredoc,nowdoc的EOF使用说明
必须后接分号,开始标记和结束标记需要一致.
结束标记必须顶格独自占一行.
开始标记可以不带引号或带单双引号.
双引号解释变量,单引号不解释变量。
双引号解释转义字符,单引号不解释转义字符,但是解释'和\。
单引号的效率比双引号要高。

php变量与常量

php中的变量用一个$美元符号后面跟变量名来表示.变量名是大小写敏感的.

命令规则以标致符为准则。

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

变量作用域

  • local(局部)(函数体内)
  • global(全局)(函数体外)
  • static(静态)(函数体内,重调不清0)
  • parameter,参数作用域

函数之外声明的变量拥有Global作用域,只能在函数以外进行访问, 如果要在函数里使用需要添加global关键字声明.

它不像C可以直接在函数里使用.

函数内声明的变量会在函数执行完以后就把变量销毁, 使用static可以保证变量不被销毁,这个静态变量最好自己手动释放. 因为在使用swoole之类的常驻内存编程,不手动释放,它会一直存在.

预定义变量

  • $GLOBALS — 引用全局作用域中可用的全部变量
  • $_SERVER — 服务器和执行环境信息
  • $_GET — HTTP GET 变量
  • $_POST — HTTP POST 变量
  • $_FILES — HTTP 文件上传变量
  • $_REQUEST — HTTP Request 变量
  • $_SESSION — Session 变量
  • $_ENV — 环境变量
  • $_COOKIE — HTTP Cookies
  • $php_errormsg — 前一个错误信息
  • $HTTP_RAW_POST_DATA — 原生POST数据
  • $http_response_header — HTTP 响应头
  • $argc — 传递给脚本的参数数目
  • $argv — 传递给脚本的参数数组

来自php之外的变量

当提交表单时,可以用一幅图像代替标准的提交按钮,用类似这样的标记:

<input type="image" src="image.gif" name="sub" />

当用户点击到图像中的某处时,相应的表单会被传送到服务器,并加上两个变量 sub_x 和 sub_y。

它们包含了用户点击图像的坐标。有经验的用户可能会注意到被浏览器发送的实际变量名包含的是一个点而不是下划线(即 sub.x 和 sub.y), 但 PHP 自动将点转换成了下划线。

HTTP Cookies

Cookies 是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。

可以用 setcookie() 函数设定 cookies。

Cookies 是 HTTP 信息头中的一部分,因此 SetCookie 函数必须在向浏览器发送任何输出之前调用。

对于 header() 函数也有同样的限制。Cookie 数据会在相应的 cookie 数据数组中可用,例如 $_COOKIE,$HTTP_COOKIE_VARS 和 $_REQUEST。

setcookie("MyCookie[foo]", 'Testing 1', time()+3600);

可变变量

$a = 'hello';
$$a = 'world'

// 以下两种方式结果一样
echo "$a ${$a}"; 
echo "$a $hello";

常量

常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。

常量默认为大小写敏感。传统上常量标识符总是大写的。

自定义常量不要以__开头,避免与魔术常量混淆.

define("PI", 3.14);
const PI = 3.14;

const和define的区别

  • const是一种语言结构,define是函数
  • const会考虑命名空间,意味着在不同的命名空间下可以定义同名的常量,define不可以.
  • define函数的第三个参数可以控制是否大小写敏感,const必须是大小写敏感.

常量和变量有如下不同

  • 常量前面没有美元符号($);
  • 常量只能用 define() 函数定义,而不能通过赋值语句;
  • 常量可以不用理会变量的作用域而在任何地方定义和访问;
  • 常量一旦定义就不能被重新定义或者取消定义;
  • 常量的值只能是标量。

魔术常量

名称说明
LINE文件中的当前行号。
FILE文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
DIR文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
FUNCTION函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
CLASS类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
TRAITTrait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
METHOD类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
NAMESPACE当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

php运算符

算术运算符

+,-,*,/,%,-(取反),.(字符串连接符)

比较运算符

==,====(判断类型),!=,<>,!==,>,<,>=,<=

逻辑运算符

and,or,xor(异或),&&,||,!()

位运算符

&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移),>>(右移)

三元运算符

(expr1) ? (expr2) : (expr3);
(expr1)??(expr3)

字符串连接符

.
.=,复合运算

错误控制运算符

@

执行运算符

反引号``,安全模式或关闭了shell_exec时是无效的.
与函数shell_exec()相同.

递增,递减运算符

例子名称效果
++$a前加$a 的值加一,然后返回 $a。
$a++后加返回 $a,然后将 $a 的值加一。
--$a前减$a 的值减一, 然后返回 $a。
$a--后减返回 $a,然后将 $a 的值减一。

数组运算符

数组运算符是对键的运算而不是对值的运算.

例子名称结果
$a + $b联合$a 和 $b 的联合。
$a == $b相等如果 $a 和 $b 具有相同的键/值对则为 TRUE。
$a === $b全等如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE。
$a != $b不等如果 $a 不等于 $b 则为 TRUE。
$a <> $b不等如果 $a 不等于 $b 则为 TRUE。
$a !== $b不全等如果 $a 不全等于 $b 则为 TRUE。

类型运算符

instanceof
用于确定一个php变量是否属于某一类class的实例.

太空飞船运算符

  • 当左值与右值相等时返回0
  • 当左值小于右值时返回-1
  • 当左值大于右值时返回1
<=>

null合并运算符

此运算符只能是null才有效,为''(空)为0都无效

??

nullsafe运算符

对象引用解析为null不抛异常,而是返回null,这样不用每次is_null判断了.

?->
// 自 PHP 8.0.0 起可用
$result = $repository?->getUser(5)?->name;

运算符优先级,从高到低

运算符优先级指定了两个表达式绑定得有多"紧密"。可以使用括号来强制改变优先级。

如果运算符优先级相同,则使用从左到右的左联顺序。

结合方向运算符附加信息
clone new
[]array()
**算术运算符,pow()
++ -- ~ (int) (float) (string) (array) (object) (bool) @类型和递增/递减
instanceof类型
!逻辑运算符
* / %算术运算符
+ - .算术运算符和字符串运算符
<< >>位运算符
< <= > >=比较运算符
== != === !== <> <=>比较运算符
&位运算符和引用
^位运算符
|位运算符
&&逻辑运算符
||逻辑运算符
??比较运算符
? :ternary
right= += -= *= **= /= .= %= &= |= ^= <<= >>=赋值运算符
and逻辑运算符
xor逻辑运算符
or逻辑运算符

php流程控制

分支语句

if, else, elseif

$a = 5;
$b = 9;

if ($a > $b):
    echo "a is bigger than b";
elseif ($a == $b):
    echo "a is equal to b";
else:
    echo "a is smaller than b";
endif;


if ($a > $b) {
    echo "a is bigger than b";
} elseif ($a == $b) {
    echo "a is equal to b";
} else {
    echo "a is smaller than b";
}

switch

switch 语句类似于具有同一个表达式的一系列 if 语句。

if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}

match,php8新特性

这个实现类似三目运算,像工厂函数一样.

// php8以后才可以使用

$condition = 3;

function display(){
    echo "Hello display()!\n";
}

$result = match($condition){
    1,2 => "Hello Moments!",
    3 => display(),
    default => "Hello World!",
};

var_dump($result);

循环语句

while

while (expr)
    statement
    
while (expr):
    statement
    ...
endwhile;

do-while

$i = 0;
do {
   echo $i;
} while ($i > 0);

for

for 循环是 PHP 中最复杂的循环结构。

for (expr1; expr2; expr3)
    statement
    
for (expr1; expr2; expr3):
    statement;
    ...
endfor;

foreach

foreach 语法结构提供了遍历数组的简单方式。

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

break

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行。

break 可以接受一个可选的数字参数来决定跳出几重循环。

continue

continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。

goto

跳转语句,尽量少用,可读性不是很好.

goto mylabel;
echo "Hello World!";
mylabel:
echo "Moments";  

递归语句

#将字符串进行倒排输出    
$myvar = "abcd";
function reverse($myvar, $flag=-1){
    if($flag<strlen($myvar)-1){
        $flag++;
        $myvar = reverse(substr($myvar,0,$flag).substr($myvar,strlen($myvar)-1).substr($myvar,$flag,strlen($myvar)-1-$flag), $flag);
    }
    return $myvar;
}
echo reverse($myvar);  

异常处理语句

  • 简单的die()语句
$conn = mysql_connect("localhost","root","123456") or die("Error"); 
  • error_reporting() 设置 PHP 的报错级别并返回当前级别。
//不报告所有错误
error_reporting(~E_ALL);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
  • 异常处理
try{
    //可能出现错误或异常的代码
    //catch 捕获  Exception是php已定义好的异常类
} catch(Exception $e){
    echo $e->getMessage();
    //对异常处理,方法:
        //1、自己处理
        //2、不处理,将其再次抛出
}

php函数

函数的参数传递,按值传递,引用传递.

参数可以指定默认值,也可以使用不定参数.

php如何声明定义函数

#可以使用默认参数    
function myfun($myvar="Moments") {
}   

php类

php7以后支持匿名类.

$class = new class{
    function display() {
        echo 'Hello Moments';
    }
}
关键词解释
new实例化一个类
extends继承一个类
::class类名的解析
public,protected,private访问控制
__construct构造函数
__destruct析构函数
abstract抽象类
interface接口
implements实现接口
trait水平继承
self::当前类的静态引用
static::后期静态绑定,动态引用
$this指向调用它的对象
parent::指向父类

php文件处理

include和require语句

在php中,您可以在服务器执行php文件之前在该文件中插入一个文件的内容.

include和require语句用于在执行流中插入写在其他文件中的有用的代码.

require生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行.

include生成一个警告(E_WARNING),错误发生后脚本会继续执行.

文件处理

fopen()函数用于在php中打开文件.

此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件.

模式描述
r只读.在文件的开头开始.
r+读/写.在文件的开头开始.
w只写.打开关清空文件的内容;如果文件不存在,则创建新文件.
w+读/写.打开并清空文件的内容;如果文件不存在,则创建新文件.
a追加.打开并向文件末尾进行写操作,如果文件不存在,则创建新文件.
a+读/追加.通过向文件末尾写内容,来保持文件内容.
x只写.创建新文件.如果文件已存在,则返回FALSE和一个错误.
x+读写.创建新文件.如果文件已存在,则返回FALSE和一个错误.

fileatime()获取访问时间

filectime(),filemtime()获取修改时间

filectime 指文件任意元数据被改变则日期就被更新。包括权限 内容等。
filemtime 指文件内容修改 也包括 文件的内容被重新写入但是内容不变也算修改。

文件上传

全局数组$_FILES

$_FILES['file']['name'] // 上传文件的名称
$_FILES['file']['type'] // 上传文件的类型
$_FILES['file']['size'] // 上传文件的大小,以字节计
$_FILES['file']['tmp_name'] // 存储在服务器的文件的临时副本的名称
$_FILES['file']['error'] // 由文件上传导致的错误代码

move_uploaded_file($_FILES['file']['tmp_name'], "upload/" . $_FILES['file']['name']);

php会话缓存

cookie常用于识别用户. cookie是一种服务器留在用户计算机上的小文件. 每当同一台计算机通过浏览器请求页面时,这台计算机将会发送cookie. 通过php你能够创建并返回cookie的值.

如何创建Cookie

bool setcookie(string name [, string $value = "" [, int expire = 0 [,
string $path = '" [, string $domain = "" [, bool $secure = false [, 
bool $httponly = false ]]]]]])
setcookie('name', $_GET['name'], time()+3600, "/", "boss.m.com", false, true);
setcookie(name, value, expire, path, domain);
// 3600一个小时
setcookie('user', 'Moments', time()+3600);

如何取回Cookie的值

echo $_COOKIE['user'];

如何删除Cookie

// 当删除 cookie 时,您应当使过期日期变更为过去的时间点
setcookie('user', '', time()-3600);

php如何处理浏览器不支持cookie的情况

#可以使用表单
#可以使用SESSION

Session

PHP session变量用于存储关于用户会话(session)的信息, 或者更改用户会话(session)的设置.

Session变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的.

一个访问者访问你的web网站将被分配一个唯一的id,就是所谓的会话。 这个id可以存储在用户端的一个cookie中,也可以通过URL进行传递。

通过为每个独立用户分配唯一的会话ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。

一般来说,会话ID通过cookie的方式发送到浏览器,并且在服务器端也是通过会话ID来取回会话中的数据。

如果请求中不包含会话ID信息,那么PHP就会创建一个新的会话,并为新创建的会话分配新的ID。

php如何使用session会话变量

#启动会话
session_start();
if(isset($_SESSION['Moments'])){
    $_SESSION['Moments'] += 1;
}else{
    $_SESSION['Moments'] = 0;
}
echo $_SESSION['Moments'];

开始Session

session.name 指定会话名以用做cookie的名字。只能由字母数字组成,默认为PHPSESSID。

session_start(['name'=>'Moments']);

session.save_handler

定义了来存储和获取与会话关联的数据的处理器的名字。默认为files。

存储Session变量

session_start();
$_SESSION['views'] = 1;

echo $_SESSION['views'];

销毁Session

unset($_SESSION['views']);
// 彻底终结session
session_destroy();

session_name

读取/设置会话名称。 此函数返回当前会话名称。 如果指定name参数,session_name()函数会更新会话名称,并返回原来的会话名称。

string session_name([string $name])
session_name('Moments');
session_start();

session_set_save_handler

设置用户自定义会话存储函数

// 5.4以前
bool session_set_save_handler(
callable $open, 
callable $close, 
callable $read, 
callable $write,
callable $destroy,
callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp]]])

// 5.4以后
bool session_set_save_handler(SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true])
// 数据库
CREATE TABLE `Session` (
    `Session_Id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
    `Session_Expires` datatime NOT NULL,
    `Session_Data` text COLLATE utf8_unicode_ci,
    PRIMARY KEY (`Session_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SELECT * FROM mydb.Session;

class SysSession implements SessionHandlerInterface
{
    private $link;
    
    public function open($savePath, $sessionName){
        $link = mysqli_connect('localhost', 'root', '123456', 'mydb');
        if($link){
            $this->link = $link;
            return true;
        }else{
            return false;
        }
    }
    
    public function close(){
        mysqli_close($this->link);
        return true;
    }
    
    public function read($id){
        $result = mysqli_query($this->link, "SELECT Session_Data FROM Session WHERE Session_Id = 
        '" . $id . "' AND Sessioni_Expires > '" . date('Y-m-d H:i:s') . "'");
        if($row = mysqli_fetch_assoc($result)){
            return $row['Session_Data'];
        }else{
            return '';
        }
    }
    
    public function write($id, $data){
        $DateTime = date('Y-m-d H:i:s');
        $NewDateTime = date('Y-m-d H:i:s', strtotime($DateTime . ' + 1 hour'));
        $result = mysqli_query($this->link, "REPLACE INTO Session SET Session_Id = '".$id."',
        Session_Expires = '".$NewDateTime."', Session_Data='".$data."'");
        
        if($result){
            return true;
        }else{
            return false;
        }
    }
    
    public function gc(maxlifetime){
        $result = mysqli_query($this->link, "DELETE FROM Session WHERE
        ((UNIX_TIMESTAMP(Session_Expires) + ".$maxlifetime .") < ". $maxlifetime.")");
        if($result){
            return true;
        }else{
            return false;
        }
    }
}

$handler = new SysSession();
session_set_save_handler($handler, true);

session_cache_expire

返回/设置当前缓存的到期时间

请求开始的时候,缓存到期时间会被重置为180,并且保存在session.cache_expire配置项中。 因此,针对每个请求,需要在session_start()函数调用这前调用session_cache_expire()来设置缓存到期时间。

int session_cache_expire([string $new_cache_expire])

session_cache_limiter

读取/设置缓存限制器的名称。

string session_cache_limiter([string $cache_limiter])

session_create_id

创建一个新的会话id。

string session_create_id([string $prefix])

session_decode

解码会话数据。 并且使用解码后的数据填充$_SESSION超级全局变量。

bool session_decode(string $data)

session_destroy

销毁一个会话中的全部数据。

bool session_destroy(void)

session_gc

对会话执行垃圾回收。

int session_gc(void)

获取会话cookie参数。

session_id

获取/设置当前会话ID。

string session_id([string $id])

session_name

读取/设置会话名称

string session_name([string $name])

session_regenerate_id

使用新生成的会话ID更新现有会话ID。

bool session_regenerate_id([bool $delete_old_session=false])

设置会话cookie参数

void session_set_cookie_params(int $lifetime [, string $path [, string $domain [, bool $secure=false
[, bool $httponly=false]]])

session_set_save_handler

设置用户自定义会话存储函数

session_status

返回当前会话状态。

  • PHP_SESSION_DISABLED // 会话是被禁用的
  • PHP_SESSION_NONE // 会话是启用的,但不存在当前会话
  • PHP_SESSION_ACTIVE // 会话是启用的,而且存在当前会话
int session_status(void)

session_write_close

写入会话数据并且关闭会话。

bool session_write_close()

php异常处理

简单的die语句

$conn = mysql_connect("localhost","root","123456") or die("Error");

error_reporting

设置 PHP 的报错级别并返回当前级别

//不报告所有错误
error_reporting(~E_ALL);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);

异常处理

try{
    //可能出现错误或异常的代码
    //catch 捕获  Exception是php已定义好的异常类
} catch(Exception $e){
    echo $e->getMessage();
    //对异常处理,方法:
    //1、自己处理
    //2、不处理,将其再次抛出
}

php如果打开错误提示

#error_reporting()设置php的报错级别并返回当前的级别.
//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
// 报错级别设定,一般在开发环境中用E_ALL,这样能够看到所有错误提示
// 系统正常运行后,直接设定为E_ALL || ~E_NOTICE,取消错误显示

php处理XML

xml特殊字符

在xml中有一些特殊字符是不能直接使用的,需要进过转义之后再用。
&lt;<
&gt;>
&apos;'
&quot;"
&amp;&

xml声明中的各部分含义

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
#xml声明在文档中只能出现一次,而且必须是在第一行,连空行也不允许存在。
<?xml:表示xml声明的开始标记。
version="1.0":xml的版本说明,是声明中必不可少的属性,而且必须放到第一位。
encoding="gb2312":编码声明。xml默认是使用utf-8来解析文档。
standalone="yes":独立声明。为yes值说明该xml文档不依赖于外部文档。
?>:xml声明的结束标记。

xml命名空间

#命名空间通过在元素前面增加一个前缀来保证元素和属性的唯一性。
它最重要的用途是用于融会不同的XML文档。
<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<外语图书 xmlns:frn="http://www.bccd.com/foreign">
   <frn:English>
        <frn:书名>First</frn:书名>
        <frn:时间>Time</frn:时间>
    </frn:English>
</外语图书>

使用SimpleXML来操作XML

#simplexml_load_file():将指定的文件解析到内存中。
#simplexml_load_string():将创建的字符串解析到内存中。
#simplexml_load_date():将一个使用dom函数创建的domDocument对象导入到内存中。

php使用simplexml保存xml文档

asXML("文档名");
$xml = $myxml->asXML();
file_put_contents("文档名");
上次编辑于:
贡献者: Moments