germania-kg/addresses

1.4.2 2022-03-30 09:50 UTC

This package is auto-updated.

Last update: 2024-08-29 05:24:32 UTC


README

Germania KG · Addresses

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

安装

$ 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