emeraldinspirations/lib-objectdesignpattern-immutable

Functions that are common in immutable objects

2.2.0 2017-08-29 15:31 UTC

This package is not auto-updated.

Last update: 2024-04-14 02:02:39 UTC


README

emeraldinspirations logo

lib-objectdesignpattern-immutable

An object design pattern support class in emeraldinspiration's library.

Functions that are common in immutable objects

Installing / Getting started

This project has no dependencies, so can be cloned directly from the git repo or required with Composer.

Require with Composer

composer require emeraldinspirations/lib-objectdesignpattern-immutable

Example

<?php

use emeraldinspirations\library\objectDesignPattern\immutable\ImmutableTrait;

class ExampleImmutableObject
{
    use ImmutableTrait;

    protected $Property;

    /**
     * Return value of Property
     *
     * @return \stdclass
     */
    public function getProperty() : \stdclass
    {
        return $this->Property;
    }

    /**
     * Create new instance with new Property value
     *
     * @param \stdclass $Property New value
     *
     * @return self
     */
    public function withProperty(\stdclass $Property) : self {
        return $this->with(__FUNCTION__, $Property);
    }

    /**
     * Clone all specified properties are cloned as necessary
     *
     * @return void
     */
    public function __clone()
    {

        // Create an array of references to properties to clone
        $PropertiesToByCloned = [
            &$this->Property,
        //  ^ - IMPORTANT: Be sure to pass by reference
        ];

        self::cloneArrayRecursively($PropertiesToByCloned);

    }

}

Contributing

If you'd like to contribute, please fork the repository and use a feature branch.

I am also open to feedback about how well I am being compliant with standards and "best practices." I have written software solo for years, and am trying to learn how to work better with others.

Licensing

The code in this project is licensed under MIT license.