|
| 1 | +# StdLib |
| 2 | + |
| 3 | +[](LICENSE) |
| 4 | +[](https://packagist.org/packages/toolkit/stdlib) |
| 5 | +[](https://packagist.org/packages/toolkit/stdlib) |
| 6 | +[](https://github.com/php-toolkit/stdlib/actions) |
| 7 | +[](https://php-toolkit.github.io/stdlib/) |
| 8 | + |
| 9 | +🧰 Stdlib - Useful basic tools library for PHP development. |
| 10 | + |
| 11 | +**Contains**: |
| 12 | + |
| 13 | +- array, string, number, object helper |
| 14 | +- common php, OS env information |
| 15 | + |
| 16 | +**More Utils** |
| 17 | + |
| 18 | +- `PhpDotEnv` Dotenv(`.env`) file load |
| 19 | +- `AutoLoader` Simple autoloader |
| 20 | +- `ObjectBox` simple object container |
| 21 | +- `Optional` like java `java.util.Optional` |
| 22 | +- and more ... |
| 23 | + |
| 24 | +## Install |
| 25 | + |
| 26 | +```bash |
| 27 | +composer require toolkit/stdlib |
| 28 | +``` |
| 29 | + |
| 30 | +## Strings |
| 31 | + |
| 32 | +### StrBuffer |
| 33 | + |
| 34 | +```php |
| 35 | +use Toolkit\Stdlib\Str\StrBuffer; |
| 36 | + |
| 37 | +$buf = StrBuffer::new("c"); |
| 38 | +$buf->prepend('ab') |
| 39 | +$buf->append('de') |
| 40 | + |
| 41 | +$str = (string)$buf; // "abcde" |
| 42 | +$str = $buf->toString(); // "abcde" |
| 43 | +// get and clean. |
| 44 | +$str = $buf->fetch(); // "abcde" |
| 45 | +$str = $buf->join(','); // "ab,c,de" |
| 46 | +``` |
| 47 | + |
| 48 | +## Objects |
| 49 | + |
| 50 | +### Object box |
| 51 | + |
| 52 | +`ObjectBox` - Simple object container. |
| 53 | + |
| 54 | +```php |
| 55 | +use Toolkit\Stdlib\Obj\ObjectBox; |
| 56 | + |
| 57 | +$box = ObjectBox::global(); |
| 58 | + |
| 59 | +// set |
| 60 | +$box->set('router', function () { |
| 61 | + return new MyRouter(); |
| 62 | +}); |
| 63 | + |
| 64 | +$box->set('renderer', [ |
| 65 | + 'class' => MyRenderer::class, |
| 66 | + 'tplDir' => 'path/to/dir', |
| 67 | +]); |
| 68 | + |
| 69 | +// with options for create |
| 70 | +$box->set('somObj', [ |
| 71 | + 'class' => MyObject::class, |
| 72 | + '__opt' => [ |
| 73 | + // will always create new object. |
| 74 | + 'objType' => ObjectBox::TYPE_PROTOTYPE, |
| 75 | + ], |
| 76 | +]); |
| 77 | + |
| 78 | +// get |
| 79 | +/** @var MyRouter $router */ |
| 80 | +$router = $box->get('router'); |
| 81 | +/** @var MyRenderer $renderer */ |
| 82 | +$renderer = $box->get('renderer'); |
| 83 | +``` |
| 84 | + |
| 85 | +## Util classes |
| 86 | + |
| 87 | +### AutoLoader |
| 88 | + |
| 89 | +`AutoLoader` - an simple psr4 loader, can use for tests. |
| 90 | + |
| 91 | +```php |
| 92 | +AutoLoader::addFiles([ |
| 93 | + // alone files |
| 94 | +]); |
| 95 | + |
| 96 | +$loader = AutoLoader::getLoader(); |
| 97 | +$loader->addPsr4Map([ |
| 98 | + 'namespace' => 'path' |
| 99 | +]); |
| 100 | + |
| 101 | +$loader->addClassMap([ |
| 102 | + 'name' => 'class file' |
| 103 | +]); |
| 104 | +``` |
| 105 | + |
| 106 | +### Optional |
| 107 | + |
| 108 | +It aims to eliminate excessive if judgments. |
| 109 | + |
| 110 | +Not use Optional: |
| 111 | + |
| 112 | +```php |
| 113 | +use Toolkit\Stdlib\Util\Optional; |
| 114 | + |
| 115 | +$userModel = UserModel::findOne(23); |
| 116 | + |
| 117 | +if ($userModel) { |
| 118 | + $username = $userModel->name; |
| 119 | +} else { |
| 120 | + $username = 'unknown'; |
| 121 | +} |
| 122 | +``` |
| 123 | + |
| 124 | +Use Optional: |
| 125 | + |
| 126 | +```php |
| 127 | +use Toolkit\Stdlib\Util\Optional; |
| 128 | + |
| 129 | +$username = Optional::ofNullable($userModel) |
| 130 | + ->map(function ($userModel) { |
| 131 | + return $userModel->name; |
| 132 | + })->orElse('unknown'); |
| 133 | +``` |
| 134 | + |
| 135 | +Use arrow syntax: |
| 136 | + |
| 137 | +```php |
| 138 | +use Toolkit\Stdlib\Util\Optional; |
| 139 | + |
| 140 | +$username = Optional::ofNullable($userModel) |
| 141 | + ->map(fn($userModel) => $userModel->name) |
| 142 | + ->orElse('unknown'); |
| 143 | +``` |
| 144 | + |
| 145 | +### Php DotEnv |
| 146 | + |
| 147 | +`PhpDotEnv` - a simple dont env file loader. |
| 148 | + |
| 149 | +The env config file `.env` (must is 'ini' format): |
| 150 | + |
| 151 | +```ini |
| 152 | +APP_ENV=dev |
| 153 | +DEBUG=true |
| 154 | +; ... ... |
| 155 | +``` |
| 156 | + |
| 157 | +Usage: |
| 158 | + |
| 159 | +```php |
| 160 | +PhpDotEnv::load(__DIR__, '.env'); |
| 161 | + |
| 162 | +env('DEBUG', false); |
| 163 | +env('APP_ENV', 'prod'); |
| 164 | +``` |
| 165 | + |
| 166 | +### Stream |
| 167 | + |
| 168 | +```php |
| 169 | +use Toolkit\Stdlib\Util\Stream\DataStream; |
| 170 | +use Toolkit\Stdlib\Util\Stream\ListStream; |
| 171 | + |
| 172 | +$userList = ListStream::of($userModels) |
| 173 | + ->filter(fn($userModel) => $userModel->age > 20) // only need age > 20 |
| 174 | + ->map(function ($userModel) { |
| 175 | + // only need field: age, name |
| 176 | + return [ |
| 177 | + 'age' => $userModel->age, |
| 178 | + 'name' => $userModel->name, |
| 179 | + ]; |
| 180 | + }) |
| 181 | + ->toArray(); |
| 182 | + |
| 183 | +vdump($userList); |
| 184 | +``` |
| 185 | + |
| 186 | +### PipeFilters |
| 187 | + |
| 188 | +```php |
| 189 | +$pf = PipeFilters::newWithDefaultFilters(); |
| 190 | + |
| 191 | +$val = $pf->applyString('inhere', 'upper'); // 'INHERE' |
| 192 | +$val = $pf->applyString('inhere', 'upper|substr:0,3'); // 'INH' |
| 193 | +``` |
| 194 | + |
| 195 | +## License |
| 196 | + |
| 197 | +[MIT](LICENSE) |
0 commit comments