germania-kg / addresses
1.4.2
2022-03-30 09:50 UTC
Requires
- php: ^7.2|^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.12
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^7.0|^8.0
- spatie/phpunit-watcher: ^1.8
README
Germania KG · Addresses
安装
$ composer require germania-kg/addresses
用法
AddressInterface 和 Address 类
AddressInterface 提供了以下 5 个基本方法,其中 Address 是其基本实现
<?php use Germania\Address; $address = new Address; // All these are string or null echo $address->getStreet1(); echo $address->getStreet2(); echo $address->getZip(); echo $address->getLocation(); echo $address->getCountry(); echo $address->getType(); // Depending on street1/street2, zip, and location echo $address->isEmpty() ? "empty" : "has address data"; // Setters accept string or null, // returning fluent interface. $address->setStreet1( $new_street_1 ) ->setStreet2( $new_street_2 ) ->setZip( $new_zip ) ->setLocation( $new_location ) ->setsetCountry( $new_country ) ->setType( $new_type );
Address 类还实现了 AddressProviderInterface,返回自身
$adr2 = $address->getAddress(); $adr2 === $address; // true
使用工厂创建
AddressFactory 类是可调用的,并接受关联数组。
<?php use Germania\Address; $factory = new AddressFactory; $address = $factory([ 'type' => 'office', 'street1' => 'Street name 1', 'street2' => null, 'zip' => 'DG2JQ', 'location' => 'Dumfries', 'country' => 'Scotland' ]);
默认情况下,工厂创建 Address 实例;使用的具体类可以通过构造函数设置进行配置
// Given a custom implementation // and $address_data from database class CustomAddress extends Address {} $address_data = array( ... ); $factory = new AddressFactory( CustomAddress::class ); $address = $factory( $address_data ); echo get_class( $address ); // CustomAddress
使用工厂更新 Address 实例
工厂还有一个针对 AddressProviderInterface 实例的 apply 方法。它将使用数组参数提供的信息应用
<?php use Germania\Address\AddressFactory; use Germania\Address\AddressProviderInterface; use Germania\Address\Address; // Custom AddressProviderInterface implementation class MyAddressProvider implements AddressProviderInterface { }; $address_provider = new MyAddressProvider; $factory = new AddressFactory; $address_provider = $factory->apply($provider_address, [ 'street1' => 'Updated information' ]);
记住,类 Address 也实现了 AddressProviderInterface!
$old_address = new Address; $new_address = factory->apply(old_address, new_address_data); echo get_class( $new_address ); // Address
获取和设置 Address 对象
AddressProviderInterface 接口提供了一个 getAddress 方法。特性 AddressProviderTrait 提供了一个实现
<?php use Germania\AddressProviderInterface; use Germania\AddressProviderTrait; class MyClass implements AddressProviderInterface { use AddressProviderTrait; } $obj = new MyClass; $address = $obj->getAddress();
AddressAwareInterface 扩展了 AddressProviderInterface 并额外提供了一个 setAdress 方法。特性 AddressAwareTrait 提供了一个实现,使用 AddressProviderTrait。
<?php use Germania\Address; use Germania\AddressAwareInterface; use Germania\AddressAwareTrait; class MyClass implements AddressProviderInterface { use AddressAwareTrait; } $obj = new MyClass; $address = $obj->getAddress(); // null $obj->setAddress( new Address ); print_r( $obj->getAddress() ); // Germania\Address
问题
请参阅完整问题列表。
路线图
填写计划或希望的功能
开发
$ git clone https://github.com/GermaniaKG/Addresses.git
$ cd Addresses
$ composer install
单元测试
您可以将 phpunit.xml.dist
复制到 phpunit.xml
并根据您的需要进行调整,或者保持不变。运行 PhpUnit 测试或 composer 脚本,如下所示
$ composer test # or $ vendor/bin/phpunit