PHP 怎么ADR 记录

wen PHP项目 1

本文目录导读:

PHP 怎么ADR 记录

  1. 场景一:DNS 记录操作(最常见)
  2. 场景二:架构模式(Active Record / 领域模型)
  3. 如何选择?

在 PHP 中,ADR 通常有两种完全不同的含义,取决于你的上下文,我帮你分别梳理一下:

DNS 记录操作(最常见)

如果你指的是在 PHP 中查询或操作 DNS 的 A/AAAA 记录(即域名解析记录),PHP 提供了内置函数来处理。

查询 A 记录(最常用)

<?php
$domain = 'google.com';
// 方法1:使用 dns_get_record(推荐,返回详细数组)
$records = dns_get_record($domain, DNS_A);
echo '<pre>';
print_r($records);
// 输出类似:
// Array
// (
//     [0] => Array
//         (
//             [host] => google.com
//             [class] => IN
//             [ttl] => 299
//             [type] => A
//             [ip] => 142.250.72.14
//         )
// )
echo '</pre>';
// 方法2:使用 gethostbyname(简单,只返回一个IP字符串)
$ip = gethostbyname($domain);
echo "IP 地址: " . $ip; // 输出: IP 地址: 142.250.72.14
?>

查询 AAAA 记录(IPv6)

<?php
// 查询 IPv6 记录
$records = dns_get_record('google.com', DNS_AAAA);
print_r($records);
// 输出包含 type => AAAA 和 ipv6 字段
?>

检查域名是否存在(返回布尔值)

<?php
if (checkdnsrr('google.com', 'A')) {
    echo '该域名存在 A 记录';
} else {
    echo '该域名没有 A 记录';
}
?>

架构模式(Active Record / 领域模型)

如果你指的是 Active Record 模式(一种数据库设计模式,其中数据表的一行对应一个对象),PHP 常见的实现方式如下:

使用 Laravel 的 Eloquent ORM(最流行)

<?php
// 1. 定义模型 (继承 Eloquent)
class User extends Model
{
    // 自动映射到 users 表
    protected $fillable = ['name', 'email'];
}
// 2. 使用 (这就是典型的 ADR 模式)
$user = new User();
$user->name = 'John';
$user->email = 'john@example.com';
$user->save();  // 保存到数据库
// 查询
$user = User::find(1);  // 通过主键获取
echo $user->name;
?>

使用原生 PDO 手动实现(简单示例)

<?php
// 这是一个简化的 Active Record 概念示例
class UserRecord {
    private $db;
    private $id;
    private $data = [];
    public function __construct($pdo) {
        $this->db = $pdo;
    }
    public function load($id) {
        $stmt = $this->db->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$id]);
        $this->data = $stmt->fetch(PDO::FETCH_ASSOC);
        $this->id = $id;
        return $this;
    }
    public function save() {
        if ($this->id) {
            // 更新
            $stmt = $this->db->prepare("UPDATE users SET name = ? WHERE id = ?");
            $stmt->execute([$this->data['name'], $this->id]);
        } else {
            // 插入
            $stmt = $this->db->prepare("INSERT INTO users (name) VALUES (?)");
            $stmt->execute([$this->data['name']]);
        }
    }
    public function __get($name) {
        return $this->data[$name] ?? null;
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}
// 使用
$user = new UserRecord($pdo);
$user->load(1);
echo $user->name; // 读取
$user->name = 'New Name';
$user->save();    // 更新
?>

如何选择?

  • 如果是要做域名解析工具(比如检查网站是否在线),用 场景一dns_get_record()
  • 如果是要写业务系统(比如用户管理),用 场景二 结合框架(Laravel/ThinkPHP)的 ORM 更高效。

如果你说的 ADR 是其他特定含义(比如某个特定库或协议),请补充说明一下具体场景,我再针对性解答。

抱歉,评论功能暂时关闭!