bjoern-goetschke / object-dot-access
通过提供字符串来访问嵌套对象属性的库
3.0.1
2024-01-06 21:26 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- ext-json: *
- ext-mbstring: *
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.0
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
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 内部
- 标记为内部的所有内容可能随时出现问题,但大多数情况下
修补版本
应该是没有问题的