2017 © Pedro PelΓ‘ez
 

extension lazy-init

LazyInit - lazy initialization helper

image

iiifx-production/lazy-init

LazyInit - lazy initialization helper

  • Wednesday, November 23, 2016
  • by IIIFX
  • Repository
  • 3 Watchers
  • 3 Stars
  • 1,137 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 15 Versions
  • 7 % Grown

The README.md

LazyInit

LazyInit - Ρ…Π΅Π»ΠΏΠ΅Ρ€ для быстрого создания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π»Π΅Π½ΠΈΠ²ΠΎΠΉ(ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ) ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ., (*1)

SensioLabsInsight, (*2)

Latest Version on Packagist Build Status Total Downloads, (*3)

ΠžΡ‚Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ (лСнивая) инициализация (Lazy initialization) - ΠΏΡ€ΠΈΡ‘ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° нСкоторая рСсурсоёмкая опСрация (созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, вычислСниС значСния) выполняСтся нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ использован Π΅Ρ‘ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, инициализация выполняСтся Β«ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽΒ», Π° Π½Π΅ Π·Π°Π±Π»Π°Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ., (*4)

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования: ``` php class DeepThought { protected $answer;, (*5)

public function getAnswer ()
{
    if ( $this->answer === null ) {
        $this->answer = 42;
    }

    return $this->answer;
}

}, (*6)

$deepThought = new DeepThought(); echo $deepThought->getAnswer(); # 42, (*7)


Аналогичный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с использованиСм LazyInit: ``` php class DeepThought { use \iiifx\LazyInit\LazyInitTrait; public function getAnswer () { return $this->lazyInit( function () { return 42; } ); } } $deepThought = new DeepThought(); echo $deepThought->getAnswer(); # 42

Установка

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Composer:, (*8)

``` bash $ composer require "iiifx-production/lazy-init:1.*", (*9)


## ИспользованиС LazyInitTrait содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ lazyInit() ΠΈ свойство $lazyInitData, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСний. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Π² динамичСском контСкстС. ``` php mixed lazyInit( Closure $container, string|array $dependency = null, array $params = [] )
  • $container - Closure-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, содСрТащий Π² сСбС вычислСния, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
  • $dependency - Π‘Ρ‚Ρ€ΠΎΠΊΠ°, массив зависимостСй ΠΈΠ»ΠΈ null - для сохранСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° вычислСния. Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован автоматичСски.
  • $params - Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² Closure-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΈ Π΅Π³ΠΎ запускС.

LazyInitStaticTrait содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄ lazyInitStatic() ΠΈ свойство $lazyInitStaticData, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСний. ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования Π² статичСских классах Π² статичСском контСкстС., (*10)

``` php mixed lazyInitStatic( Closure $container, string|array $dependency = null, array $params = [] ), (*11)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ способны автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ для Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Π² ΠΊΠΎΠ΄Π΅. Π­Ρ‚ΠΎ рСализуСтся с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ [debug_backtrace()][link-debug-backtrace].

## ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π³Π΅Ρ‚Ρ‚Π΅Ρ€:
``` php
class Lazy
{
    use \iiifx\LazyInit\LazyInitTrait;

    /**
     * @return string
     */
    public function getDate ()
    {
        return $this->lazyInit( function () {
            return date( 'd.m.Y' );
        }, __METHOD__ );
    }
}

$lazy = new Lazy();
echo $lazy->getDate(); # '12.07.2015'

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ с автоматичСским созданиСм ΠΊΠ»ΡŽΡ‡Π°: ``` php class Lazy { use \iiifx\LazyInit\LazyInitTrait;, (*12)

/**
 * @return string
 */
public function getMicrotime ()
{
    return $this->lazyInit( function () {
        return microtime( true );
    } );
}

}, (*13)

$lazy = new Lazy(); echo $lazy->getMicrotime(); # 1438928722.9734, (*14)




Π“Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ с Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ входящих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: ``` php class Lazy { use \iiifx\LazyInit\LazyInitTrait; /** * @param string $string * * @return mixed[] */ public function parseString ( $string ) { return $this->lazyInit( function () use ( $string ) { # ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ return explode( ':', $string ); }, [ __METHOD__, $string, ] ); } /** * @param int $timastamp * * @return string */ public function formatTimastamp( $timastamp ) { return $this->lazyInit( function ( $t ) { return date( 'd.m.Y', $t ); }, [ __METHOD__, $timastamp, ], [ $timastamp # ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΊΠ°ΠΊ свойство ] ); } } $lazy = new Lazy(); var_export( $lazy->parseString( 'A:B:C' ) ); # [ 0 => 'A', 1 => 'B', 2 => 'C' ] var_export( $lazy->formatTimastamp( time() ) ); # '12.07.2015'

ИспользованиС Π² статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…: ``` php class LazyStatic { use \iiifx\LazyInit\LazyInitStaticTrait;, (*15)

/**
 * @return string
 */
public static function getDate ()
{
    return self::lazyInitStatic( function () {
        return date( 'd.m.Y' );
    }, __METHOD__ );
}

}, (*16)

echo LazyStatic::getDate(); # '12.07.2015', (*17)




ИспользованиС Ρ…Π΅Π»ΠΏΠ΅Ρ€Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ классов: ``` php use iiifx\LazyInit\LazyInitHelper; function buildString( $array ) { return LazyInitHelper::lazyInit( function ($v) { return implode( '.', $v ); }, 'build-string', [ $array ] ); } echo buildString( [ 1, 5, 32 ] ); # '1.5.32'

ИспользованиС ΠΏΡ€ΠΈ создании ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ(Singleton): ``` php class Singleton { use \iiifx\LazyInit\LazyInitStaticTrait;, (*18)

private function __construct () {}
private function __clone () {}
private function __wakeup () {}

/**
 * @return static
 */
public static function getInstance ()
{
    return static::lazyInitStatic( function () {
        return new static();
    }, __METHOD__ );
}

} $instance = Singleton::getInstance();, (*19)




ИспользованиС ΠΏΡ€ΠΈ создании ΠΏΡƒΠ»Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π΅ΠΊ([Multiton][link-wikipedia-multiton]): ``` php class Multiton { use \iiifx\LazyInit\LazyInitStaticTrait; private function __clone () {} private function __wakeup () {} public $key; protected function __construct ( $key ) { $this->key = $key; } /** * @param string $key * * @return static */ public static function getInstance ( $key ) { return static::lazyInitStatic( function ( $key ) { return new static( $key ); }, $key, [ $key ] ); } } echo Multiton::getInstance( 'master' )->key; # 'master' echo Multiton::getInstance( 'slave' )->key; # 'slave' echo Multiton::getInstance( 'master' )->key; # 'master'

ВСсты

Build Status [Code Coverage][link-scrutinizer], (*20)

ЛицСнзия

Software License, (*21)

The Versions

23/11 2016

dev-master

9999999-dev https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

22/11 2016

v1.0.3

1.0.3.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

21/11 2016

dev-develop

dev-develop https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

24/05 2016

v1.0.2

1.0.2.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

13/05 2016

v1.0.1

1.0.1.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

13/05 2016

dev-hotfix/1.0.1

dev-hotfix/1.0.1 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

13/05 2016

v1.0.0

1.0.0.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

26/10 2015

v0.3.4

0.3.4.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

26/10 2015

v0.3.3

0.3.3.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

26/10 2015

v0.3.2

0.3.2.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

07/08 2015

v0.3.1

0.3.1.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

27/07 2015

v0.2.2

0.2.2.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

12/07 2015

v0.2.1

0.2.1.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

10/07 2015

v0.2.0

0.2.0.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init

09/07 2015

v0.1.0

0.1.0.0 https://github.com/iiifx-production/lazy-init

LazyInit - lazy initialization helper

  Sources   Download

MIT License

The Requires

  • php >=5.4

 

The Development Requires

by Vitaliy IIIFX Khomenko

php lazy lazy-init