Completed
Push — master ( 197eed...6f0e33 )
by Simonas
10:57 queued 11s
created

Search::setTrackTotalHits()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/*
4
 * This file is part of the ONGR package.
5
 *
6
 * (c) NFQ Technologies UAB <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace ONGR\ElasticsearchDSL;
13
14
use ONGR\ElasticsearchDSL\Aggregation\AbstractAggregation;
15
use ONGR\ElasticsearchDSL\Highlight\Highlight;
16
use ONGR\ElasticsearchDSL\InnerHit\NestedInnerHit;
17
use ONGR\ElasticsearchDSL\Query\Compound\BoolQuery;
18
use ONGR\ElasticsearchDSL\SearchEndpoint\AbstractSearchEndpoint;
19
use ONGR\ElasticsearchDSL\SearchEndpoint\AggregationsEndpoint;
20
use ONGR\ElasticsearchDSL\SearchEndpoint\HighlightEndpoint;
21
use ONGR\ElasticsearchDSL\SearchEndpoint\InnerHitsEndpoint;
22
use ONGR\ElasticsearchDSL\SearchEndpoint\PostFilterEndpoint;
23
use ONGR\ElasticsearchDSL\SearchEndpoint\QueryEndpoint;
24
use ONGR\ElasticsearchDSL\SearchEndpoint\SearchEndpointFactory;
25
use ONGR\ElasticsearchDSL\SearchEndpoint\SearchEndpointInterface;
26
use ONGR\ElasticsearchDSL\SearchEndpoint\SortEndpoint;
27
use ONGR\ElasticsearchDSL\Serializer\Normalizer\CustomReferencedNormalizer;
28
use ONGR\ElasticsearchDSL\Serializer\OrderedSerializer;
29
use Symfony\Component\Serializer\Normalizer\CustomNormalizer;
30
use ONGR\ElasticsearchDSL\SearchEndpoint\SuggestEndpoint;
31
32
/**
33
 * Search object that can be executed by a manager.
34
 */
35
class Search
36
{
37
    /**
38
     * If you don’t need to track the total number of hits at all you can improve
39
     * query times by setting this option to false. Defaults to true.
40
     *
41
     * @var bool
42
     */
43
    private $trackTotalHits;
44
45
    /**
46
     * To retrieve hits from a certain offset. Defaults to 0.
47
     *
48
     * @var int
49
     */
50
    private $from;
51
52
    /**
53
     * The number of hits to return. Defaults to 10. If you do not care about getting some
54
     * hits back but only about the number of matches and/or aggregations, setting the value
55
     * to 0 will help performance.
56
     *
57
     * @var int
58
     */
59
    private $size;
60
61
    /**
62
     * Allows to control how the _source field is returned with every hit. By default
63
     * operations return the contents of the _source field unless you have used the
64
     * stored_fields parameter or if the _source field is disabled.
65
     *
66
     * @var bool
67
     */
68
    private $source;
69
70
    /**
71
     * Allows to selectively load specific stored fields for each document represented by a search hit.
72
     *
73
     * @var array
74
     */
75
    private $storedFields;
76
77
    /**
78
     * Allows to return a script evaluation (based on different fields) for each hit.
79
     * Script fields can work on fields that are not stored, and allow to return custom
80
     * values to be returned (the evaluated value of the script). Script fields can
81
     * also access the actual _source document indexed and extract specific elements
82
     * to be returned from it (can be an "object" type).
83
     *
84
     * @var array
85
     */
86
    private $scriptFields;
87
88
    /**
89
     * Allows to return the doc value representation of a field for each hit. Doc value
90
     * fields can work on fields that are not stored. Note that if the fields parameter
91
     * specifies fields without docvalues it will try to load the value from the fielddata
92
     * cache causing the terms for that field to be loaded to memory (cached), which will
93
     * result in more memory consumption.
94
     *
95
     * @var array
96
     */
97
    private $docValueFields;
98
99
    /**
100
     * Enables explanation for each hit on how its score was computed.
101
     *
102
     * @var bool
103
     */
104
    private $explain;
105
106
    /**
107
     * Returns a version for each search hit.
108
     *
109
     * @var bool
110
     */
111
    private $version;
112
113
    /**
114
     * Allows to configure different boost level per index when searching across more
115
     * than one indices. This is very handy when hits coming from one index matter more
116
     * than hits coming from another index (think social graph where each user has an index).
117
     *
118
     * @var array
119
     */
120
    private $indicesBoost;
121
122
    /**
123
     * Exclude documents which have a _score less than the minimum specified in min_score.
124
     *
125
     * @var int
126
     */
127
    private $minScore;
128
129
    /**
130
     * Pagination of results can be done by using the from and size but the cost becomes
131
     * prohibitive when the deep pagination is reached. The index.max_result_window which
132
     * defaults to 10,000 is a safeguard, search requests take heap memory and time
133
     * proportional to from + size. The Scroll api is recommended for efficient deep
134
     * scrolling but scroll contexts are costly and it is not recommended to use it for
135
     * real time user requests. The search_after parameter circumvents this problem by
136
     * providing a live cursor. The idea is to use the results from the previous page to
137
     * help the retrieval of the next page.
138
     *
139
     * @var array
140
     */
141
    private $searchAfter;
142
143
    /**
144
     * URI parameters alongside Request body search.
145
     *
146
     * @link https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html
147
     *
148
     * @var array
149
     */
150
    private $uriParams = [];
151
152
    /**
153
     * While a search request returns a single “page” of results, the scroll API can be used to retrieve
154
     * large numbers of results (or even all results) from a single search request, in much the same way
155
     * as you would use a cursor on a traditional database. Scrolling is not intended for real time user
156
     * requests, but rather for processing large amounts of data, e.g. in order to reindex the contents
157
     * of one index into a new index with a different configuration.
158
     *
159
     * @var string
160
     */
161
    private $scroll;
162
163
    /**
164
     * @var OrderedSerializer
165
     */
166
    private static $serializer;
167
168
    /**
169
     * @var SearchEndpointInterface[]
170
     */
171
    private $endpoints = [];
172
173
    /**
174
     * Constructor to initialize static properties
175
     */
176
    public function __construct()
177
    {
178
        $this->initializeSerializer();
179
    }
180
181
    /**
182
     * Wakeup method to initialize static properties
183
     */
184
    public function __wakeup()
185
    {
186
        $this->initializeSerializer();
187
    }
188
189
    /**
190
     * Initializes the serializer
191
     */
192
    private function initializeSerializer()
193
    {
194
        if (static::$serializer === null) {
0 ignored issues
show
Bug introduced by
Since $serializer is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $serializer to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
195
            static::$serializer = new OrderedSerializer(
0 ignored issues
show
Bug introduced by
Since $serializer is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $serializer to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
196
                [
197
                    new CustomReferencedNormalizer(),
198
                    new CustomNormalizer(),
199
                ]
200
            );
201
        }
202
    }
203
204
    /**
205
     * Destroys search endpoint.
206
     *
207
     * @param string $type Endpoint type.
208
     */
209
    public function destroyEndpoint($type)
210
    {
211
        unset($this->endpoints[$type]);
212
    }
213
214
    /**
215
     * Adds query to the search.
216
     *
217
     * @param BuilderInterface $query
218
     * @param string           $boolType
219
     * @param string           $key
220
     *
221
     * @return $this
222
     */
223
    public function addQuery(BuilderInterface $query, $boolType = BoolQuery::MUST, $key = null)
224
    {
225
        $endpoint = $this->getEndpoint(QueryEndpoint::NAME);
226
        $endpoint->addToBool($query, $boolType, $key);
0 ignored issues
show
Documentation introduced by
$boolType is of type string, but the function expects a array|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Bug introduced by
It seems like $key defined by parameter $key on line 223 can also be of type string; however, ONGR\ElasticsearchDSL\Se...tInterface::addToBool() does only seem to accept array|null, maybe add an additional type check?

This check looks at variables that have been passed in as parameters and are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
227
228
        return $this;
229
    }
230
231
    /**
232
     * Returns endpoint instance.
233
     *
234
     * @param string $type Endpoint type.
235
     *
236
     * @return SearchEndpointInterface
237
     */
238
    private function getEndpoint($type)
239
    {
240
        if (!array_key_exists($type, $this->endpoints)) {
241
            $this->endpoints[$type] = SearchEndpointFactory::get($type);
242
        }
243
244
        return $this->endpoints[$type];
245
    }
246
247
    /**
248
     * Returns queries inside BoolQuery instance.
249
     *
250
     * @return BoolQuery
251
     */
252
    public function getQueries()
253
    {
254
        $endpoint = $this->getEndpoint(QueryEndpoint::NAME);
255
256
        return $endpoint->getBool();
257
    }
258
259
    /**
260
     * Sets query endpoint parameters.
261
     *
262
     * @param array $parameters
263
     *
264
     * @return $this
265
     */
266
    public function setQueryParameters(array $parameters)
267
    {
268
        $this->setEndpointParameters(QueryEndpoint::NAME, $parameters);
269
270
        return $this;
271
    }
272
273
    /**
274
     * Sets parameters to the endpoint.
275
     *
276
     * @param string $endpointName
277
     * @param array  $parameters
278
     *
279
     * @return $this
280
     */
281
    public function setEndpointParameters($endpointName, array $parameters)
282
    {
283
        /** @var AbstractSearchEndpoint $endpoint */
284
        $endpoint = $this->getEndpoint($endpointName);
285
        $endpoint->setParameters($parameters);
286
287
        return $this;
288
    }
289
290
    /**
291
     * Adds a post filter to search.
292
     *
293
     * @param BuilderInterface $filter   Filter.
294
     * @param string           $boolType Example boolType values:
295
     *                                   - must
296
     *                                   - must_not
297
     *                                   - should.
298
     * @param string           $key
299
     *
300
     * @return $this.
0 ignored issues
show
Documentation introduced by
The doc-type $this. could not be parsed: Unknown type name "$this." at position 0. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
301
     */
302
    public function addPostFilter(BuilderInterface $filter, $boolType = BoolQuery::MUST, $key = null)
303
    {
304
        $this
305
            ->getEndpoint(PostFilterEndpoint::NAME)
306
            ->addToBool($filter, $boolType, $key);
0 ignored issues
show
Documentation introduced by
$boolType is of type string, but the function expects a array|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Bug introduced by
It seems like $key defined by parameter $key on line 302 can also be of type string; however, ONGR\ElasticsearchDSL\Se...tInterface::addToBool() does only seem to accept array|null, maybe add an additional type check?

This check looks at variables that have been passed in as parameters and are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

Loading history...
307
308
        return $this;
309
    }
310
311
    /**
312
     * Returns queries inside BoolFilter instance.
313
     *
314
     * @return BoolQuery
315
     */
316
    public function getPostFilters()
317
    {
318
        $endpoint = $this->getEndpoint(PostFilterEndpoint::NAME);
319
320
        return $endpoint->getBool();
321
    }
322
323
    /**
324
     * Sets post filter endpoint parameters.
325
     *
326
     * @param array $parameters
327
     *
328
     * @return $this
329
     */
330
    public function setPostFilterParameters(array $parameters)
331
    {
332
        $this->setEndpointParameters(PostFilterEndpoint::NAME, $parameters);
333
334
        return $this;
335
    }
336
337
    /**
338
     * Adds aggregation into search.
339
     *
340
     * @param AbstractAggregation $aggregation
341
     *
342
     * @return $this
343
     */
344
    public function addAggregation(AbstractAggregation $aggregation)
345
    {
346
        $this->getEndpoint(AggregationsEndpoint::NAME)->add($aggregation, $aggregation->getName());
347
348
        return $this;
349
    }
350
351
    /**
352
     * Returns all aggregations.
353
     *
354
     * @return BuilderInterface[]
355
     */
356
    public function getAggregations()
357
    {
358
        return $this->getEndpoint(AggregationsEndpoint::NAME)->getAll();
359
    }
360
361
    /**
362
     * Adds inner hit into search.
363
     *
364
     * @param NestedInnerHit $innerHit
365
     *
366
     * @return $this
367
     */
368
    public function addInnerHit(NestedInnerHit $innerHit)
369
    {
370
        $this->getEndpoint(InnerHitsEndpoint::NAME)->add($innerHit, $innerHit->getName());
371
372
        return $this;
373
    }
374
375
    /**
376
     * Returns all inner hits.
377
     *
378
     * @return BuilderInterface[]
379
     */
380
    public function getInnerHits()
381
    {
382
        return $this->getEndpoint(InnerHitsEndpoint::NAME)->getAll();
383
    }
384
385
    /**
386
     * Adds sort to search.
387
     *
388
     * @param BuilderInterface $sort
389
     *
390
     * @return $this
391
     */
392
    public function addSort(BuilderInterface $sort)
393
    {
394
        $this->getEndpoint(SortEndpoint::NAME)->add($sort);
395
396
        return $this;
397
    }
398
399
    /**
400
     * Returns all set sorts.
401
     *
402
     * @return BuilderInterface[]
403
     */
404
    public function getSorts()
405
    {
406
        return $this->getEndpoint(SortEndpoint::NAME)->getAll();
407
    }
408
409
    /**
410
     * Allows to highlight search results on one or more fields.
411
     *
412
     * @param Highlight $highlight
413
     *
414
     * @return $this.
0 ignored issues
show
Documentation introduced by
The doc-type $this. could not be parsed: Unknown type name "$this." at position 0. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
415
     */
416
    public function addHighlight($highlight)
417
    {
418
        $this->getEndpoint(HighlightEndpoint::NAME)->add($highlight);
419
420
        return $this;
421
    }
422
423
    /**
424
     * Returns highlight builder.
425
     *
426
     * @return BuilderInterface
427
     */
428
    public function getHighlights()
429
    {
430
        /** @var HighlightEndpoint $highlightEndpoint */
431
        $highlightEndpoint = $this->getEndpoint(HighlightEndpoint::NAME);
432
433
        return $highlightEndpoint->getHighlight();
434
    }
435
436
    /**
437
    * Adds suggest into search.
438
    *
439
    * @param BuilderInterface $suggest
440
    *
441
    * @return $this
442
    */
443
    public function addSuggest(NamedBuilderInterface $suggest)
444
    {
445
        $this->getEndpoint(SuggestEndpoint::NAME)->add($suggest, $suggest->getName());
0 ignored issues
show
Documentation introduced by
$suggest->getName() is of type string, but the function expects a array|null.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
446
447
        return $this;
448
    }
449
450
    /**
451
    * Returns all suggests.
452
    *
453
    * @return BuilderInterface[]
454
    */
455
    public function getSuggests()
456
    {
457
        return $this->getEndpoint(SuggestEndpoint::NAME)->getAll();
458
    }
459
460
    /**
461
     * @return int
462
     */
463
    public function getFrom()
464
    {
465
        return $this->from;
466
    }
467
468
    /**
469
     * @param int $from
470
     *
471
     * @return $this
472
     */
473
    public function setFrom($from)
474
    {
475
        $this->from = $from;
476
477
        return $this;
478
    }
479
480
    /**
481
     * @return bool
482
     */
483
    public function isTrackTotalHits()
484
    {
485
        return $this->trackTotalHits;
486
    }
487
488
    /**
489
     * @param bool $trackTotalHits
490
     *
491
     * @return $this
492
     */
493
    public function setTrackTotalHits(bool $trackTotalHits)
494
    {
495
        $this->trackTotalHits = $trackTotalHits;
496
497
        return $this;
498
    }
499
500
    /**
501
     * @return bool
502
     */
503
    public function isTrackTotalHits()
504
    {
505
        return $this->trackTotalHits;
506
    }
507
508
    /**
509
     * @param bool $trackTotalHits
510
     * @return $this
511
     */
512
    public function setTrackTotalHits(bool $trackTotalHits)
513
    {
514
        $this->trackTotalHits = $trackTotalHits;
515
        return $this;
516
    }
517
518
    /**
519
     * @return int
520
     */
521
    public function getSize()
522
    {
523
        return $this->size;
524
    }
525
526
    /**
527
     * @param int $size
528
     *
529
     * @return $this
530
     */
531
    public function setSize($size)
532
    {
533
        $this->size = $size;
534
535
        return $this;
536
    }
537
538
    /**
539
     * @return bool
540
     */
541
    public function isSource()
542
    {
543
        return $this->source;
544
    }
545
546
    /**
547
     * @param bool $source
548
     *
549
     * @return $this
550
     */
551
    public function setSource($source)
552
    {
553
        $this->source = $source;
554
555
        return $this;
556
    }
557
558
    /**
559
     * @return array
560
     */
561
    public function getStoredFields()
562
    {
563
        return $this->storedFields;
564
    }
565
566
    /**
567
     * @param array $storedFields
568
     *
569
     * @return $this
570
     */
571
    public function setStoredFields($storedFields)
572
    {
573
        $this->storedFields = $storedFields;
574
575
        return $this;
576
    }
577
578
    /**
579
     * @return array
580
     */
581
    public function getScriptFields()
582
    {
583
        return $this->scriptFields;
584
    }
585
586
    /**
587
     * @param array $scriptFields
588
     *
589
     * @return $this
590
     */
591
    public function setScriptFields($scriptFields)
592
    {
593
        $this->scriptFields = $scriptFields;
594
595
        return $this;
596
    }
597
598
    /**
599
     * @return array
600
     */
601
    public function getDocValueFields()
602
    {
603
        return $this->docValueFields;
604
    }
605
606
    /**
607
     * @param array $docValueFields
608
     *
609
     * @return $this
610
     */
611
    public function setDocValueFields($docValueFields)
612
    {
613
        $this->docValueFields = $docValueFields;
614
615
        return $this;
616
    }
617
618
    /**
619
     * @return bool
620
     */
621
    public function isExplain()
622
    {
623
        return $this->explain;
624
    }
625
626
    /**
627
     * @param bool $explain
628
     *
629
     * @return $this
630
     */
631
    public function setExplain($explain)
632
    {
633
        $this->explain = $explain;
634
635
        return $this;
636
    }
637
638
    /**
639
     * @return bool
640
     */
641
    public function isVersion()
642
    {
643
        return $this->version;
644
    }
645
646
    /**
647
     * @param bool $version
648
     *
649
     * @return $this
650
     */
651
    public function setVersion($version)
652
    {
653
        $this->version = $version;
654
655
        return $this;
656
    }
657
658
    /**
659
     * @return array
660
     */
661
    public function getIndicesBoost()
662
    {
663
        return $this->indicesBoost;
664
    }
665
666
    /**
667
     * @param array $indicesBoost
668
     *
669
     * @return $this
670
     */
671
    public function setIndicesBoost($indicesBoost)
672
    {
673
        $this->indicesBoost = $indicesBoost;
674
675
        return $this;
676
    }
677
678
    /**
679
     * @return int
680
     */
681
    public function getMinScore()
682
    {
683
        return $this->minScore;
684
    }
685
686
    /**
687
     * @param int $minScore
688
     *
689
     * @return $this
690
     */
691
    public function setMinScore($minScore)
692
    {
693
        $this->minScore = $minScore;
694
695
        return $this;
696
    }
697
698
    /**
699
     * @return array
700
     */
701
    public function getSearchAfter()
702
    {
703
        return $this->searchAfter;
704
    }
705
706
    /**
707
     * @param array $searchAfter
708
     *
709
     * @return $this
710
     */
711
    public function setSearchAfter($searchAfter)
712
    {
713
        $this->searchAfter = $searchAfter;
714
715
        return $this;
716
    }
717
718
    /**
719
     * @return string
720
     */
721
    public function getScroll()
722
    {
723
        return $this->scroll;
724
    }
725
726
    /**
727
     * @param string $scroll
728
     *
729
     * @return $this
730
     */
731
    public function setScroll($scroll = '5m')
732
    {
733
        $this->scroll = $scroll;
734
735
        $this->addUriParam('scroll', $this->scroll);
736
737
        return $this;
738
    }
739
740
    /**
741
     * @param string $name
742
     * @param string|array|bool $value
743
     *
744
     * @return $this
745
     */
746
    public function addUriParam($name, $value)
747
    {
748
        if (in_array($name, [
749
            'q',
750
            'df',
751
            'analyzer',
752
            'analyze_wildcard',
753
            'default_operator',
754
            'lenient',
755
            'explain',
756
            '_source',
757
            '_source_exclude',
758
            '_source_include',
759
            'stored_fields',
760
            'sort',
761
            'track_scores',
762
            'timeout',
763
            'terminate_after',
764
            'from',
765
            'size',
766
            'search_type',
767
            'scroll',
768
            'allow_no_indices',
769
            'ignore_unavailable',
770
            'typed_keys',
771
            'pre_filter_shard_size',
772
            'ignore_unavailable',
773
        ])) {
774
            $this->uriParams[$name] = $value;
775
        } else {
776
            throw new \InvalidArgumentException(sprintf('Parameter %s is not supported.', $value));
777
        }
778
779
        return $this;
780
    }
781
782
    /**
783
     * Returns query url parameters.
784
     *
785
     * @return array
786
     */
787
    public function getUriParams()
788
    {
789
        return $this->uriParams;
790
    }
791
792
    /**
793
     * {@inheritdoc}
794
     */
795
    public function toArray()
796
    {
797
        $output = array_filter(static::$serializer->normalize($this->endpoints));
0 ignored issues
show
Bug introduced by
Since $serializer is declared private, accessing it with static will lead to errors in possible sub-classes; consider using self, or increasing the visibility of $serializer to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return static::$someVariable;
    }
}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass { }

YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class SomeClass
{
    private static $someVariable;

    public static function getSomeVariable()
    {
        return self::$someVariable; // self works fine with private.
    }
}
Loading history...
798
799
        $params = [
800
            'from' => 'from',
801
            'size' => 'size',
802
            'source' => '_source',
803
            'storedFields' => 'stored_fields',
804
            'scriptFields' => 'script_fields',
805
            'docValueFields' => 'docvalue_fields',
806
            'explain' => 'explain',
807
            'version' => 'version',
808
            'indicesBoost' => 'indices_boost',
809
            'minScore' => 'min_score',
810
            'searchAfter' => 'search_after',
811
            'trackTotalHits' => 'track_total_hits',
812
        ];
813
814
        foreach ($params as $field => $param) {
815
            if ($this->$field !== null) {
816
                $output[$param] = $this->$field;
817
            }
818
        }
819
820
        return $output;
821
    }
822
}
823