2017 © Pedro Peláez
 

library lazy-map

A library that provides lazy instantiation logic for a map of objects

image

ocramius/lazy-map

A library that provides lazy instantiation logic for a map of objects

  • Friday, May 2, 2014
  • by Ocramius
  • Repository
  • 5 Watchers
  • 54 Stars
  • 437,149 Installations
  • PHP
  • 6 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 2 Versions
  • 1 % Grown

The README.md

Lazy Map

This small library aims at providing a very simple and efficient map of lazy-instantiating objects., (*1)

Total Downloads Latest Stable Version Latest Unstable Version Mutation testing badge, (*2)

Abandoned

Starting with PHP 8.3, dynamic properties are no longer allowed "out of the box". While it is still possible to have dynamic properties via explicit declaration (the #[\AllowDynamicProperties] attribute), the approach of this package is no longer to be considered safe nor efficient long-term., (*3)

Based on that, this package is deprecated and abandoned: please use traditional PHP arrays instead., (*4)

Installation

The suggested installation method is via composer:, (*5)

composer require ocramius/lazy-map

Usage

The current implementation is very simple and allows to define a map of "services" through a LazyMap\CallbackLazyMap:, (*6)

$map = new \LazyMap\CallbackLazyMap(function ($name) {
    $object = new \stdClass();

    $object->name = $name;

    return $object;
});

var_dump($map->foo);
var_dump($map->bar);
var_dump($map->{'something special'});

Purpose

The idea behind the library is to avoid un-efficient lazy-loading operations like following:, (*7)

private function getSomething($name)
{
    if (isset($this->initialized[$name]) || array_key_exists($name, $this->initialized)) {
        return $this->initialized[$name];
    }

    return $this->initialized[$name] = new Something($name);
}

This reduces overhead greatly when you'd otherwise call getSomething() thousands of times. That's especially useful when mapping a lot of different services and iterating over them over and over again., (*8)

Performance

LazyMap actually performs much better than the "un-efficient" example that I've shown above. You can look directly at the performance test suite for details on the tested implementations, but here are some results for you to have an idea of the boost:, (*9)

Initialized Map Performance:

Method Name Ops/s Relative
initializedArrayPerformance 2,277,272.90002 100.00%
initializedArrayMapPerformance 1,536,988.76108 148.16%
initializedLazyMapPerformance 4,446,227.23514 51.22%

Un-Initialized Map Performance:

Method Name Ops/s Relative
unInitializedArrayPerformance : 1,091,720.80627 100.00%
unInitializedArrayMapPerformance 688,132.30083 158.65%
unInitializedLazyMapPerformance: 912,191.90744 119.68%

The Versions

02/05 2014

dev-master

9999999-dev https://github.com/Ocramius/LazyMap

A library that provides lazy instantiation logic for a map of objects

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

The Development Requires

service location map lazy lazy loading lazy instantiation

09/11 2013

1.0.0

1.0.0.0 https://github.com/Ocramius/LazyMap

A library that provides lazy instantiation logic for a map of objects

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

The Development Requires

service location map lazy lazy loading lazy instantiation