承接 danwe/helpers-gettersetteraccessor 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

danwe/helpers-gettersetteraccessor

最新稳定版本:v1.0.1

Composer 安装命令:

composer require danwe/helpers-gettersetteraccessor

包简介

Helper class offering functionality to define setter and getter class methods with a minimum of expressive code.

README 文档

README

Helper class offering functionality to define combined getter and setter class methods with a minimum of expressive code. An example for a "combined getter and setter" would be User::age( $age=null ) for getting or setting an user's age instead of having two separate methods User::getAge() and User::setAge( $age ).

Latest Stable Version Build Status Coverage Status Download count

Disclaimer

This library is in no way suggesting that combined getters and setters are superior to having separate methods. There might be use cases where each way has certain advantages and disatvantages. Choosing one might often just be a question of the developer's own taste of style.

Usage

See the following usage example:

<?php

use Danwe\Helpers\GetterSetterAccessor;

class Options {
  protected $formatter;
  protected $name = 'Php';
  protected $length;

  public function formatter( Formatter $value = null ) {
    return $this->getterSetter( __FUNCTION__ )
      ->initially( function() {
        return new Formatter();
      } )
      ->getOrSet( $value );
  }

  public function name( $value = null ) {
    return $this->getterSetter( __FUNCTION__ )
      ->ofType( 'string' )
      ->getOrSet( $value );
  }

  public function length( $value = null ) {
    return $this->getterSetter( __FUNCTION__ )
      ->ofType( 'int' )
      ->initially( 42 ) // Equivalent to declaring "protected $length = 42" on top
      ->getOrSet( $value );
  }

  protected function getterSetter( $accessProperty ) {
    if( !$this->getterSetter ) {
      $this->getterSetter = new GetterSetterAccessor( $this );
    }
    return $this->getterSetter->property( $accessProperty );
  }
}

Performance Implications

You should be aware that GetterSetterAccessor is using PHP's reflection facilities internally to set/get property values.

This package contains a benchmark to test a class using this library versus a simple means implementation. It can be run via:

php vendor/bin/athletic -p benchmarks

Example output:

Method Name                                 Iterations   Average Time      Ops/sec   
------------------------------------------- ----------- ----------------- ---------
hardCodedSetterGetter                      : [   6,000] [0.0000072908004] [137,159]
setterGetterUsingThisLibrary_normalUsage   : [   6,000] [0.0000241236687] [ 41,453]
setterGetterUsingThisLibrary_extensiveUsage: [   6,000] [0.0000284811258] [ 35,110]

The benchmark result indicated that using GetterSetterAccessor is three to four times slower than using hard coded methods doing the same thing (this might vary depending on the PHP version and the system). If a method is expected to be called several thousand times than this could become an actual concern.

TODOs

  • Allow to set more than one type for ofType.
  • Allow setting null values by defining another value as the one triggering the getter.

统计信息

  • 总下载量: 51
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-06-21