Kahlan\Plugin\Call\Calls::find PHP Method

find() public static method

Finds a logged call.
public static find ( object $message, integer $index, $times ) : array | false
$message object The message method name.
$index integer Start index.
return array | false Return founded log call.
    public static function find($message, $index = 0, $times = 0)
    {
        $success = false;
        $messages = !is_array($message) ? [$message] : $message;
        $message = reset($messages);
        $reference = $message->reference();
        $reference = $message->isStatic() && is_object($reference) ? get_class($reference) : $reference;
        $lastFound = null;
        $args = [];
        $count = count(static::$_logs);
        for ($i = $index; $i < $count; $i++) {
            $logs = static::$_logs[$i];
            if (!($log = static::_matchReference($reference, $logs))) {
                continue;
            }
            if (!$message->match($log, false)) {
                continue;
            }
            $args[] = $log['args'];
            if (!$message->matchArgs($log['args'])) {
                continue;
            }
            if ($message = next($messages)) {
                $lastFound = $message;
                $args = [];
                if (!($reference = $message->reference() && $log['method'])) {
                    $reference = $log['method']->actualReturn();
                }
                if (!is_object($reference)) {
                    $message = reset($messages);
                    $reference = $message->reference();
                }
                $reference = $message->isStatic() && is_object($reference) ? get_class($reference) : $reference;
                continue;
            }
            $times -= 1;
            if ($times < 0) {
                static::$_index = $i + 1;
                $success = true;
                break;
            } elseif ($times === 0) {
                $next = static::find($messages, $i + 1);
                if ($next['success']) {
                    $args = array_merge($args, $next['args']);
                    $success = false;
                } else {
                    $success = true;
                    static::$_index = $i + 1;
                }
                break;
            }
            return static::find($messages, $i + 1, $times);
        }
        $index = static::$_index;
        $message = $lastFound ?: reset($messages);
        return compact('success', 'message', 'args', 'index');
    }

Usage Example

Beispiel #1
0
 /**
  * Resolves the matching.
  *
  * @return boolean Returns `true` if successfully resolved, `false` otherwise.
  */
 public function resolve()
 {
     $startIndex = $this->_ordered ? Calls::lastFindIndex() : 0;
     $report = Calls::find($this->_message, $startIndex, $this->times());
     $this->_report = $report;
     $this->_buildDescription($startIndex);
     return $report['success'];
 }