基础篇
约 1458 字大约 5 分钟
2025-07-07
php基本变量类型
四种标量类型:boolean (布尔型)、integer (整型)、float (浮点型, 也称作 double)、string (字符串)四种复合类型:array (数组)、object (对象)、callable、iterable最后是两种特殊类型:resource(资源)、NULL(NULL)
PHP魔术方法
13个常用的魔术方法: __construct、 __destruct、 __call 或 __classStatic、 __get、 __set、 __isset、 __unset、 __toString、 __clone、 __sutoload、 __invoke、 __sleep、 __wakeup
__construct 构造方法: 当一个类被实例化创建对象时,会首先执行构造方法。__destruct 析构方法: 当对象在销毁之前或失去对对象的引用时,会调用 析构方法。__call 或 __callStatic:当调用一个未定义的或没有权限的成员方法时,会调用 __call 方法。(当在静态方法中调用一个未定义的或没有权限的成员方法时,则会调用 __callStatic 方法。)如果本类找不到调用的成员方法,会去父类中找。如果本类找不到 __call 方法,会去父类中找。__get:当调用一个未定义的或非公有的成员属性时,会调用 __get 方法。__set: 当给一个未定义的或非公有的成员属性赋值时, 会调用 __set 方法。__isset:当在一个未定义的或非公有的成员属性上调用 isset函数时,会调用 __isset 方法。__unset:当在一个未定义或非公有的成员属性上调用 unset函数时,会调用 __unset 方法。__toString:在打印输出一个对象时, 会自动调用 __toString 方法。 例: echo 对象名。__clone:当克隆一个对象时, 会自动调用 __clone 方法。 例: $clone_obj = clone 对象名;__autoload:在实例化一个尚未被定义的类时会自动调用 __autoload 来加载类文件。__invoke:当尝试以调用函数的方式调用一个对象时, 会自动调用 __invoke 方法。__sleep:serialize() 函数会检查类中是否存在 __sleep 方法,如果存在,先执行 __sleep 方法,再执行 序列化操作。
class User
{
public function __sleep(){
//
}
}
$obj = new User();
serialize($obj);__wakeup:unserialize() 函数会检查类中是否存在 __wakeup 方法,如果存在,先执行 __wakeup 方法,再执行 反序列化操作。
class User
{
public function __wakeup(){
//
}
}
$obj = new User();
unserialize($obj);PHP魔术常量
PHP 含有 9 个魔术常量。它们的值随着它们在代码中的位置改变而改变。
| 名称 | 说明 |
|---|---|
| LINE | 文件中的当前行号 |
| FILE | 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 |
| DIR | 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。 |
| NAMESPACE | 当前命名空间的名称。 |
| TRAIT | Trait 的名字。Trait 名包括其被声明的作用域(例如 Foo\Bar)。 |
| CLASS | 当前类的名称。类名包括其被声明的作用域(例如 Foo\Bar)。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。 |
| FUNCTION | 当前函数的名称。匿名函数则为 {closure}。 |
| METHOD | 类的方法名。 |
| ClassName::class | 完整的类名。 |
PHP超全局变量
PHP 有 9 个超全局变量:$_SERVER、$_GET、$_POST、$_REQUEST、$_COOKIE、$_SESSION、$_FILES、$_ENV、$GLOBALS
$_SERVER- $_SERVER: 一个包含了诸如头信息(header)、路径(path)、以及脚本位置(srcipt location)等信息的数组。这个数组中的项目由Web服务器创建。
常用 $_SERVER 中的参数
参数 描述 $_SERVER['SERVER_NAME'] 当前运行脚本所在服务器主机的名称 $_SERVER['REQUEST_METHOD'] 访问页面时的请求方法。例如:GET、HEAD,POST,PUT $_SERVER['QUERY_STRING'] 查询(query)的字符串。例如: www.bqhub.com?a=1 。 则 获取到的值为 “a=1” $_SERVER['REQUEST_URI'] 访问此页面所需的URI。例如: www.bqhub.com?a=1 。 则 获取到的值为 “/?a=1” $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。 例如: index.php $_SERVER['PHP_SELF'] 当前正在执行的脚本文件名。 $_SERVER['REMOTE_ADDR'] 当前页面用户的IP地址。 $_SERVER['REMOTE_HOST'] 当前页面用户的主机名。
- $_SERVER: 一个包含了诸如头信息(header)、路径(path)、以及脚本位置(srcipt location)等信息的数组。这个数组中的项目由Web服务器创建。
$_GET可以获取到使用 get 方法传递的参数的相关信息。$_POST可以获取到使用 post 方法传递的参数的相关信息。$_REQUEST是一个关联数组,默认包含$_GET、$_POST、$_COOKIE中的内容。建议不用这个超级变量,因为它不够安全。$_COOKIE是一个关联数组,包含 通过 HTTP cookie 传递给当前脚本的内容。$_SESSION是一个关联数组,包含当前脚本中的所有 session 内容。$_FILES是一个关联数组,包含通过 HTTP POST 方法上传给当前脚本的文件内容。$_ENV是一个包含服务器端环境变量的数组。$GLOBALS是一个关联数组, 包含对当前脚本全局 范围内定义的所有变量。
PHP 错误级别介绍与设置错误级别的方式
常见错误级别有:
E_ERROR: 致命的运行错误并阻止脚本执行E_WARNING: 运行时警告E_PARSE: 解析错误E_NOTICE: 注意E_USER_ERROR: 用户生成的错误消息E_USER_WARNING: 用户生成的警告E_USER_NOTICE: 用户生成的注意E_ALL: 所有的错误、警告、注意
设置错误级别的方式:
- 修改 php.ini 配置文件
- 例: error_reporting = E_ALL & ~E_NOTICE, 表示报告除 E_NOTICE 之外的所有错误。
- error_reporting 函数设置
- 例: error_reporting(E_ERROR | E_WARNING);
PHP异常处理
<?php
# php 使用 try catch 来捕获异常
# 例:
try
{
if ($count > 10) throw new Exception('数量不可超过 10 个');
if ($width > 100) throw new widthException('宽度不可超过 100 米');
if ($height > 150) throw new heightException('高度不可超过 150 米');
} catch (Exception $e){
# 常用异常捕获信息
echo $e->getLine();
echo $e->getCode();
echo $e->getFile();
echo $e->getMessage();
} catch (heightException $e){
echo $e->getMessage();
} catch (widthException $e){
echo $e->getMessage();
}