Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Prophecy.
|
Chris@0
|
5 * (c) Konstantin Kudryashov <ever.zet@gmail.com>
|
Chris@0
|
6 * Marcello Duarte <marcello.duarte@gmail.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Prophecy\Argument\Token;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Logical AND token.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @author Boris Mikhaylov <kaguxmail@gmail.com>
|
Chris@0
|
18 */
|
Chris@0
|
19 class LogicalAndToken implements TokenInterface
|
Chris@0
|
20 {
|
Chris@0
|
21 private $tokens = array();
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * @param array $arguments exact values or tokens
|
Chris@0
|
25 */
|
Chris@0
|
26 public function __construct(array $arguments)
|
Chris@0
|
27 {
|
Chris@0
|
28 foreach ($arguments as $argument) {
|
Chris@0
|
29 if (!$argument instanceof TokenInterface) {
|
Chris@0
|
30 $argument = new ExactValueToken($argument);
|
Chris@0
|
31 }
|
Chris@0
|
32 $this->tokens[] = $argument;
|
Chris@0
|
33 }
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * Scores maximum score from scores returned by tokens for this argument if all of them score.
|
Chris@0
|
38 *
|
Chris@0
|
39 * @param $argument
|
Chris@0
|
40 *
|
Chris@0
|
41 * @return bool|int
|
Chris@0
|
42 */
|
Chris@0
|
43 public function scoreArgument($argument)
|
Chris@0
|
44 {
|
Chris@0
|
45 if (0 === count($this->tokens)) {
|
Chris@0
|
46 return false;
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 $maxScore = 0;
|
Chris@0
|
50 foreach ($this->tokens as $token) {
|
Chris@0
|
51 $score = $token->scoreArgument($argument);
|
Chris@0
|
52 if (false === $score) {
|
Chris@0
|
53 return false;
|
Chris@0
|
54 }
|
Chris@0
|
55 $maxScore = max($score, $maxScore);
|
Chris@0
|
56 }
|
Chris@0
|
57
|
Chris@0
|
58 return $maxScore;
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@0
|
62 * Returns false.
|
Chris@0
|
63 *
|
Chris@0
|
64 * @return boolean
|
Chris@0
|
65 */
|
Chris@0
|
66 public function isLast()
|
Chris@0
|
67 {
|
Chris@0
|
68 return false;
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 /**
|
Chris@0
|
72 * Returns string representation for token.
|
Chris@0
|
73 *
|
Chris@0
|
74 * @return string
|
Chris@0
|
75 */
|
Chris@0
|
76 public function __toString()
|
Chris@0
|
77 {
|
Chris@0
|
78 return sprintf('bool(%s)', implode(' AND ', $this->tokens));
|
Chris@0
|
79 }
|
Chris@0
|
80 }
|