Skip to content

URL — 统一资源定位器

  • 文件位置: kernel/Foundation/HTTP/URL.php
  • 命名空间: kernel\Foundation\HTTP
  • 是否可继承: 是

URL 解析、构建与修改工具。实例化时把 URL 拆解为 protocol / host / port / user / password / pathName / queryString / queryParams / fragment / origin 等属性,可修改后经 toString() 重组;也可静态构建 URL、查询字符串、路径等。

属性

属性类型默认可见性说明
$URLstring|nullnullprotected原始 URL 字符串
$hoststring|nullnullpublic主机名
$originstring|nullnullpublic源(origin,不含协议后的参数)
$portint|nullnullpublic端口
$userstring|nullnullpublic用户名
$passwordstring|nullnullpublic密码
$pathNamestring|nullnullpublic路径
$protocolstring|nullnullpublic协议(scheme)
$queryStringstring|nullnullpublic查询字符串(原始)
$queryParamsarray[]public查询参数(键值对)
$fragmentstring|nullnullpublichash 片段

方法速查表

方法作用
__construct($URL)构造并解析 URL
parseURL($URL)静态解析 URL 为数组
parseQueryString($queryString)解析查询字符串为数组
buildQuery($queryParams, $encode)构建查询字符串
buildURL(...)静态构建完整 URL
combinedPathName(...$paths)组合多个路径段
toString()将当前属性重组为 URL 字符串
__toString()转字符串时调用 toString()
setProtocol($protocol)设置协议(链式)
setHost($host)设置主机(链式)
setPath($pathName)设置路径(链式)
setPort($port)设置端口(链式)
setFragment($fragment)设置 hash 片段(链式)
queryParam($value, $key)设置查询参数(链式)
getQueryParam($key, $default)读取查询参数
hasQueryParam($key)判断查询参数是否存在
removeQueryParam($key)移除查询参数(链式)
clearQueryParams()清空查询参数(链式)
isHttps()是否 HTTPS 协议
getDomain()获取去 www. 前缀的域名
getBase()获取站点根(protocol://host[:port])
current()$_SERVER 获取当前请求完整 URL
fromCurrent()从当前请求构造 URL 实例

方法

__construct($URL = null) — 构造并解析 URL

参数

参数类型默认说明
$URLstring|nullnullURL 地址

返回值

  • 无。

parseURL($URL) — 解析 URL

基于 parse_url,额外解析 origin 与 queryParams。

参数

参数类型默认说明
$URLstringURL 地址

返回值

  • array:含 protocol / host / port / user / password / pathName / queryString / fragment / origin / queryParams

parseQueryString($queryString) — 解析查询字符串

参数

参数类型默认说明
$queryStringstring查询字符串(不含 ?

返回值

  • array:键值对数组(键值均做 URL 解码)。

buildQuery($queryParams, $encode = true) — 构建查询字符串

参数

参数类型默认说明
$queryParamsarray请求参数(键值对)
$encodebooltrue是否对键值做 rawurlencode

返回值

  • string:构建后的查询字符串(k1=v1&k2=v2)。

buildURL($host = "", $pathName = "", $queryParams = [], $fragment = null, $protocol = "https", $port = null, $user = null, $password = null) — 构建完整 URL

参数

参数类型默认说明
$hoststring""主机信息
$pathNamestring""路径(自动补前导 /
$queryParamsarray[]请求参数
$fragmentstring|nullnullhash 片段
$protocolstring"https"请求协议
$portint|nullnull端口
$userstring|nullnull用户名
$passwordstring|nullnull密码

返回值

  • string:构建后的完整 URL。

combinedPathName(...$paths) — 组合路径段

过滤空路径段,统一分隔符为 /

参数

参数类型默认说明
$pathsstring(可变参数)路径元素

返回值

  • string:组合后的路径。

toString() — 重组 URL 字符串

用当前各属性(host/pathName/queryParams/fragment/protocol/port/user/password)重新构建完整 URL。

参数

  • 无。

返回值

  • string:重组后的 URL。

__toString() — 转字符串

调用 toString()

参数

  • 无。

返回值

  • string:URL 字符串。

queryParam($value, $key = null) — 设置查询参数

传入数组批量设置,或传入 (值, 键) 单个设置。值为空且键为空的字符串项会当作 键名=空值 处理。链式。

参数

参数类型默认说明
$valuestring|array参数值,或键值对数组
$keystring|nullnull参数名

返回值

  • $this:支持链式调用。

示例

php
$url = new URL("https://example.com/files/a.png");
$url->queryParam("s", 40);                 // 添加单个参数
$url->queryParam(["s" => 40, "q" => 80]);  // 批量添加
$url->toString();                          // "https://example.com/files/a.png?s=40&q=80"

setProtocol($protocol) — 设置协议

链式。修改 $protocol 属性。

参数

参数类型默认说明
$protocolstring协议(scheme)

返回值

  • $this:支持链式调用。

setHost($host) — 设置主机

链式。修改 $host 属性。

参数

参数类型默认说明
$hoststring主机名

返回值

  • $this:支持链式调用。

setPath($pathName) — 设置路径

链式。修改 $pathName 属性,保留已有 query 与 fragment。

参数

参数类型默认说明
$pathNamestring路径

返回值

  • $this:支持链式调用。

setPort($port) — 设置端口

链式。修改 $port 属性。

参数

参数类型默认说明
$portint|null端口

返回值

  • $this:支持链式调用。

setFragment($fragment) — 设置 hash 片段

链式。修改 $fragment 属性。

参数

参数类型默认说明
$fragmentstring|nullhash 片段

返回值

  • $this:支持链式调用。

getQueryParam($key, $default = null) — 读取查询参数

参数

参数类型默认说明
$keystring参数名
$defaultmixednull参数不存在时的默认值

返回值

  • mixed:参数值,或 $default

hasQueryParam($key) — 判断查询参数是否存在

参数

参数类型默认说明
$keystring参数名

返回值

  • bool:是否存在。

removeQueryParam($key) — 移除查询参数

链式。

参数

参数类型默认说明
$keystring参数名

返回值

  • $this:支持链式调用。

clearQueryParams() — 清空查询参数

链式。

参数

  • 无。

返回值

  • $this:支持链式调用。

isHttps() — 是否 HTTPS 协议

参数

  • 无。

返回值

  • bool$protocol === "https"

getDomain() — 获取去 www. 前缀的域名

参数

  • 无。

返回值

  • string\|null:去掉 www. 前缀的域名;无 host 时为 null

getBase() — 获取站点根

参数

  • 无。

返回值

  • string\|nullprotocol://host[:port];无协议或 host 时为 null

current() — 获取当前请求完整 URL

基于 $_SERVER 推导当前请求完整地址(含路径与 query)。

参数

  • 无。

返回值

  • string:当前请求完整 URL;baseURL() 推导失败时为 ""

fromCurrent() — 从当前请求构造 URL 实例

参数

  • 无。

返回值

  • URL:以 current() 解析出的实例。