Upgrade to Pro — share decks privately, control downloads, hide ads and more …

using up Laravel Collection

Avatar for nunulk nunulk
May 21, 2017

using up Laravel Collection

Avatar for nunulk

nunulk

May 21, 2017
Tweet

More Decks by nunulk

Other Decks in Programming

Transcript

  1. <?php
 namespace nunulk;
 
 use PHPBLT\LightningTalk;
 
 /**
 * @author

    nunulk - freelance PHP programmer / Laravel lover
 * @description ຊ೔͸ Laravel ʹࠝแ͞Ε͍ͯΔ Collection Ϋϥεʹ͍͓ͭͯ࿩͠·͢
 */
 class MyTalk extends LightningTalk
 {
 public function content()
 {
 // ࠓ೔࿩͢͜ͱ
 return Collection::make([
 1 => ‘Laravel Collection ͷศརͳϝιου’,
 2 => ‘͢΂ͯͷAPIʹ͍ͭͯαϯϓϧίʔυΛॻ͘’,
 3 => ‘͓·͚:ϦϑϨΫγϣϯͰϝιουΛऔಘ͢Δ’,
 ]);
 }
 }
  2. <?php
 namespace Tests\Unit;
 
 use Illuminate\Support\Collection;
 use Tests\TestCase;
 /**
 *

    ศརͳϝιουͦͷ1 - pluck
 */
 class CollectionTest extends TestCase
 {
 public function testPluck()
 {
 $items = new Collection([
 [‘id' => 1, 'name' => ‘John Doe’, 'score' => 3],
 [‘id' => 2, 'name' => ‘Jane Doe’, 'score' => 4],
 ]);
 // ഑ྻ͔ΒࢦఆͷΩʔͰ࿈૝഑ྻΛͭ͘Δ
 $pairs = $items->pluck(‘name’, ‘id’);
 $this->assertEquals([1 => ‘John Doe’, 2 => ‘Jane Doe’], $pairs->toArray());
 }
 }
 

  3. <?php
 namespace Tests\Unit;
 
 use Illuminate\Support\Collection;
 use Tests\TestCase;
 /**
 *

    ศརͳϝιουͦͷ2 - where
 */
 class CollectionTest extends TestCase
 {
 public function testWhere()
 {
 $items = new Collection([
 ['id' => 1, 'score' => 3],
 ['id' => 2, 'score' => 4],
 ['id' => 3, 'score' => 5],
 ]);
 // foreach ͱ if ͷ૊Έ߹Θ͔ͤΒͷղ์
 $filtered = $items->where('score', '>', 3);
 $this->assertEquals([2, 3], $filtered->pluck('id')->toArray());
 }
 }

  4. <?php
 namespace Tests\Unit;
 
 use Illuminate\Support\Collection;
 use Tests\TestCase;
 /**
 *

    ศརͳϝιουͦͷ3 - except
 */
 class CollectionTest extends TestCase
 {
 public function testExcept()
 {
 $entity = new Collection([‘id' => 1, 'name' => ‘John Doe', 'score' => 3]);
 // foreach ͱ if ͷ૊Έ߹Θ͔ͤΒͷղ์
 $excepted = $entity->except([‘name’]);
 $this->assertEquals(['id' => 1, 'score' => 3], $excepted->toArray());
 // key ͕ͳͯ͘΋ౖΒΕͳ͍Α
 $excepted = $entity->except(['missing attribute']);
 $this->assertEquals(['id' => 1, 'name' => 'John Doe', 'score' => 10], $excepted- >toArray());
 }
 }

  5. <?php
 namespace Tests\Unit;
 
 use Illuminate\Support\Collection;
 use Tests\TestCase;
 /**
 *

    ศརͳϝιουͦͷ4 - avg
 */
 class CollectionTest extends TestCase
 {
 public function testAvg()
 {
 $items = new Collection([
 [‘id’ => 1, ‘birthday' => ‘2000-05-01’],
 [‘id’ => 2, ‘birthday' => ‘2001-05-01’],
 [‘id’ => 3, ‘birthday' => ‘2002-05-01’],
 ]);
 Carbon::setTestNow('2017-05-01 00:00:00');
 $avg = $items->avg(function ($item) {
 return (new Carbon($a['birthday']))->startOfDay()->age;
 });
 $this->assertEquals(16, $avg);
 }
 }

  6. <?php
 namespace App\Console\Commands;
 
 use Illuminate\Console\Command;
 use Illuminate\Support\Collection;
 use App\Models\Method;


    
 /**
 * Collection Ϋϥεͷެ։ϝιου਺Λ਺͑ͯΈͨ
 */
 class ListMethodsCommand extends Command
 {
 public function handle()
 {
 $class = $this->argument('class');
 $methods = Method::collectDefinitions($class);
 $methods->pluck(‘name’)->tap(function ($names) {
 echo ‘count: ‘ . $names->count() . PHP_EOL;
 echo ‘methods: ‘ . $names->implode(‘, ') . PHP_EOL;
 });
 }
 }

  7. » php artisan Laravel Framework 5.4.23
 […] » php artisan

    app:list-methods "Illuminate\\Support\\Collection" count: 98 methods: __construct, make, times, all, avg, average, median, mode, collapse, contains, containsStrict, diff, diffKeys, each, every, except, filter, when, where, whereStrict, whereIn, whereInStrict, whereNotIn, whereNotInStrict, first, flatten, flip, forget, get, groupBy, keyBy, has, implode, intersect, isEmpty, isNotEmpty, keys, last, pluck, map, mapToGroups, mapWithKeys, flatMap, max, merge, combine, union, min, nth, only, forPage, partition, pipe, pop, prepend, push, pull, put, random, reduce, reject, reverse, search, shift, shuffle, slice, split, chunk, sort, sortBy, sortByDesc, splice, sum, take, tap, transform, unique, uniqueStrict, values, zip, toArray, jsonSerialize, toJson, getIterator, getCachingIterator, count, toBase, offsetExists, offsetGet, offsetSet, offsetUnset, __toString, proxy, __get, macro, hasMacro, __callStatic, __call
  8. <?php
 namespace Tests\Unit;
 
 use Illuminate\Support\Collection;
 use Tests\TestCase;
 
 /**


    * Class CollectionTest
 * @package Tests\Unit
 */
 class CollectionTest extends TestCase
 {
 public function testConstruct()
 {
 $emptyItems = new Collection();
 $this->assertEquals([], $emptyItems->toArray());
 
 $filledItems = new Collection([1, 2, 3]);
 $this->assertEquals([1, 2, 3], $filledItems->toArray());
 }
 // (snip other 98 methods)
 }
 

  9. 
 
 
 » ./vendor/bin/phpunit tests/Unit/CollectionTest.php PHPUnit 5.7.19 by Sebastian

    Bergmann and contributors. 99 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__,------, 0 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__| /\_/\ 0 -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_^|__( ^ .^) -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ "" "" Time: 1.82 seconds, Memory: 14.00MB OK (99 tests, 168 assertions)
  10. <?php
 namespace App\Models;
 
 use Illuminate\Support\Fluent;
 use Illuminate\Support\Collection;
 […]
 


    class Method extends Fluent
 {
 public function collectDefinitions(string $class): Collection
 {
 if (!class_exists($class)) {
 return new Collection();
 }
 return Collection::make((new ReflectionClass($class))->getMethods())
 ->filter(function ($method) {
 return $method->isPublic();
 })
 ->map(function (ReflectionMethod $method) {
 return new Definition($method);
 });
 }
 }