PHPackages                             runopencode/abstract-builder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. runopencode/abstract-builder

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

runopencode/abstract-builder
============================

Simple prototype class for implementing builder pattern.

1.0.6(9y ago)0215MITPHPPHP &gt;=7.0

Since Nov 20Pushed 8y ago3 watchersCompare

[ Source](https://github.com/RunOpenCode/abstract-builder)[ Packagist](https://packagist.org/packages/runopencode/abstract-builder)[ RSS](/packages/runopencode-abstract-builder/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (6)Used By (0)

Abstracr builder
================

[](#abstracr-builder)

[![Packagist](https://camo.githubusercontent.com/bdc001ae9d4e81af4da0796f5586623c71afcc145c826664daa9544df17a2017/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f52756e4f70656e436f64652f61627374726163742d6275696c6465722e737667)](https://packagist.org/packages/runopencode/abstract-builder)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/834b0cc550d26746b56704593a7cb0a2c6d48e5198c7944e7d6dfabd06d1f4b2/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f52756e4f70656e436f64652f61627374726163742d6275696c6465722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/RunOpenCode/abstract-builder/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/5f31f4d19785b35cd8da2ed5f4c8dddb927d6a6d0e0e34bdcf6101bea925da24/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f52756e4f70656e436f64652f61627374726163742d6275696c6465722f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/RunOpenCode/abstract-builder/?branch=master)[![Build Status](https://camo.githubusercontent.com/53fcb354499c3e4ab7fd9dea205cc9fd8beff547ba32fe21d270508052b6269a/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f52756e4f70656e436f64652f61627374726163742d6275696c6465722f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/RunOpenCode/abstract-builder/build-status/master)[![Build Status](https://camo.githubusercontent.com/a4f2bd1cb28a4539f304bb4eb9ecbb0a3e1ae0e50550a71d1123c437e70684ec/68747470733a2f2f7472617669732d63692e6f72672f52756e4f70656e436f64652f61627374726163742d6275696c6465722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/RunOpenCode/abstract-builder)

[![SensioLabsInsight](https://camo.githubusercontent.com/588d072fa06034b4f97e8c9d72cebd0275337561c27b79ce508ff188ef2ca891/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f31356539316565362d343765322d343665662d626236612d6230313365333636323061322f6269672e706e67)](https://insight.sensiolabs.com/projects/15e91ee6-47e2-46ef-bb6a-b013e36620a2)

If you intend to use builder pattern in your project [(see article on Wikipedia)](https://en.wikipedia.org/wiki/Builder_pattern)you can use a prototype implementation of builder pattern from this library.

In order to do so, you have to create your own builder class, extend `RunOpenCode\AbstractBuilder\AbstractBuilder` and implement methods `configureParameters` and `getObjectFqcn`.

For those extra lazy developers, there is a `RunOpenCode\AbstractBuilder\ReflectiveAbstractBuilder` as well, which implements `configureParameters` method by introspecting constructor parameters and default values.

**NOTE:** Builder class MUST NOT validate provided parameters. Class which ought to be builded must do such validation, because construction process of any instance of any class must be valid whether is executed with or without builder implementation.

Implementation example
----------------------

[](#implementation-example)

Let's say that we have some class `Message` for which we have to provide a builder class. Here is how to do so:

```
