bjoern-goetschke/object-dot-access

通过提供字符串来访问嵌套对象属性的库

3.0.1 2024-01-06 21:26 UTC

This package is auto-updated.

Last update: 2024-09-14 21:09:14 UTC


README

此库提供了类 BjoernGoetschke\ObjectDotAccess\ObjectAccessor,用于从 stdClass 对象中读取嵌套属性。

基本用法

假设配置文件的内容如下

{
    "services": {
        "database": {
            "host": "some_host",
            "username": "some_user",
            "password": "some_password"
        }
    }
}

从配置文件中读取属性

$config = json_decode(file_get_contents('/path/to/configuration/file.json'));
// assume that $config contains an object, should be checked in a real application
$accessor = new BjoernGoetschke\ObjectDotAccess\ObjectAccessor($config);
// read the database host from the configuration, or assume "localhost"
$db_host = $accessor->getString('services.database.host', 'localhost');
// read the database username from the configuration or throw an exception
$db_user = $accessor->getStringOrError('services.database.user');
// read the database password from the configuration or throw an exception
$db_password = $accessor->getStringOrError('services.database.password');

对象访问器不会保护使用的对象免受修改,因此对象访问器不应被视为不可变。

安装

此库通过 Composer 提供

composer require bjoern-goetschke/object-dot-access:^3.0

版本控制

将使用语义版本控制按照以下格式进行版本编号

<主要>.<次要>.<修补程序>

并按照以下准则构建

  • 破坏向后兼容性将增加主版本
  • 在不破坏向后兼容性的情况下添加新功能将增加次版本
  • 错误修复和其他更改将增加修补程序

有关语义版本控制更多信息,请访问 http://semver.org/

许可协议

此库在 BSD-2-Clause 许可下发布。您可以在 LICENSE.txt 中找到此许可证的副本。

API 使用和向后兼容性

使用 @api 标签指定接口、类、方法等预期使用的相关信息。

如果一个元素不包含 @api 标签,则应将其视为内部元素,其使用可能在任何时候中断。

此规则的例外是特殊元素,如构造函数、析构函数或其他钩子方法,这些方法由编程语言定义。这些元素将不会有自己的 @api 标签,但可以视为具有与类或所属其他元素相同的 @api 标签。

此库不提供参数名称的向后兼容性保证。方法将具有 @no-named-arguments 标签,以帮助静态分析工具检测和警告使用带有命名参数的库,但在某些地方缺少该标签时,并不意味着为该特定方法提供向后兼容性保证。

@api 使用

    • 创建类的实例
      • 可能在 major 版本发布时中断
    • 扩展类并添加新的构造函数
      • 可能在 major 版本发布时中断
    • 扩展类并添加新方法
      • 可能在任何时候中断,但 minor 版本发布应该没问题(如果基类中添加了在扩展类中也声明的非私有方法,则将中断)
  • 方法
    • 调用方法
      • 可能在 major 版本发布时中断
    • 重写方法(扩展类并声明同名方法)并最终添加附加的可选参数
      • 可能在任何时候中断,但 minor 版本发布应该没问题(如果基类中添加了可选参数,则将中断)
  • 接口
    • 在类型提示中使用接口(将接口的实例作为参数)
      • 可能在 major 版本发布时中断
    • 调用接口的方法
      • 可能在 major 版本发布时中断
    • 实现接口
      • 可能在任何时候中断,但 minor 版本发布应该没问题(如果接口中添加了新方法,则将中断)
    • 扩展接口
      • 可能在任何时候中断,但 minor 版本发布应该没问题(如果基接口中添加了在扩展接口中也声明的接口,则将中断)

@api 扩展

    • 创建类的实例
      • 可能在 major 版本发布时中断
    • 扩展类并添加新的构造函数
      • 可能在 major 版本发布时中断
    • 扩展类并添加新方法
      • 可能在小版本更新时出现问题,但大多数情况下应该没问题,可能仅在大版本更新时出现问题(如果基础类中添加了在扩展类中也声明过的非私有方法,则会导致问题)
  • 方法
    • 调用方法
      • 可能在 major 版本发布时中断
    • 重写方法(扩展类并声明同名方法)并最终添加附加的可选参数
      • 可能在 major 版本发布时中断
  • 接口
    • 在类型提示中使用接口(将接口的实例作为参数)
      • 可能在 major 版本发布时中断
    • 调用接口的方法
      • 可能在 major 版本发布时中断
    • 实现接口
      • 可能在 major 版本发布时中断
    • 扩展接口
      • 可能在 major 版本发布时中断

@api 稳定

  • 标记为稳定的所有内容可能仅在大版本更新时出现问题,这意味着除了某些小的内部更改或错误修复外,代码将永远不会发生变化

@api 内部

  • 标记为内部的所有内容可能随时出现问题,但大多数情况下修补版本应该是没有问题的