You are here

MethodTag.php in Zircon Profile 8.0

File

vendor/phpdocumentor/reflection-docblock/src/phpDocumentor/Reflection/DocBlock/Tag/MethodTag.php
View source
<?php

/**
 * phpDocumentor
 *
 * PHP Version 5.3
 *
 * @author    Mike van Riel <mike.vanriel@naenius.com>
 * @copyright 2010-2011 Mike van Riel / Naenius (http://www.naenius.com)
 * @license   http://www.opensource.org/licenses/mit-license.php MIT
 * @link      http://phpdoc.org
 */
namespace phpDocumentor\Reflection\DocBlock\Tag;

use phpDocumentor\Reflection\DocBlock\Tag;

/**
 * Reflection class for a @method in a Docblock.
 *
 * @author  Mike van Riel <mike.vanriel@naenius.com>
 * @license http://www.opensource.org/licenses/mit-license.php MIT
 * @link    http://phpdoc.org
 */
class MethodTag extends ReturnTag {

  /** @var string */
  protected $method_name = '';

  /** @var string */
  protected $arguments = '';

  /** @var bool */
  protected $isStatic = false;

  /**
   * {@inheritdoc}
   */
  public function getContent() {
    if (null === $this->content) {
      $this->content = '';
      if ($this->isStatic) {
        $this->content .= 'static ';
      }
      $this->content .= $this->type . " {$this->method_name}({$this->arguments}) " . $this->description;
    }
    return $this->content;
  }

  /**
   * {@inheritdoc}
   */
  public function setContent($content) {
    Tag::setContent($content);

    // 1. none or more whitespace
    // 2. optionally the keyword "static" followed by whitespace
    // 3. optionally a word with underscores followed by whitespace : as
    //    type for the return value
    // 4. then optionally a word with underscores followed by () and
    //    whitespace : as method name as used by phpDocumentor
    // 5. then a word with underscores, followed by ( and any character
    //    until a ) and whitespace : as method name with signature
    // 6. any remaining text : as description
    if (preg_match('/^
                # Static keyword
                # Declates a static method ONLY if type is also present
                (?:
                    (static)
                    \\s+
                )?
                # Return type
                (?:
                    ([\\w\\|_\\\\]+)
                    \\s+
                )?
                # Legacy method name (not captured)
                (?:
                    [\\w_]+\\(\\)\\s+
                )?
                # Method name
                ([\\w\\|_\\\\]+)
                # Arguments
                \\(([^\\)]*)\\)
                \\s*
                # Description
                (.*)
            $/sux', $this->description, $matches)) {
      list(, $static, $this->type, $this->method_name, $this->arguments, $this->description) = $matches;
      if ($static) {
        if (!$this->type) {
          $this->type = 'static';
        }
        else {
          $this->isStatic = true;
        }
      }
      else {
        if (!$this->type) {
          $this->type = 'void';
        }
      }
      $this->parsedDescription = null;
    }
    return $this;
  }

  /**
   * Sets the name of this method.
   *
   * @param string $method_name The name of the method.
   *
   * @return $this
   */
  public function setMethodName($method_name) {
    $this->method_name = $method_name;
    $this->content = null;
    return $this;
  }

  /**
   * Retrieves the method name.
   *
   * @return string
   */
  public function getMethodName() {
    return $this->method_name;
  }

  /**
   * Sets the arguments for this method.
   *
   * @param string $arguments A comma-separated arguments line.
   *
   * @return void
   */
  public function setArguments($arguments) {
    $this->arguments = $arguments;
    $this->content = null;
    return $this;
  }

  /**
   * Returns an array containing each argument as array of type and name.
   *
   * Please note that the argument sub-array may only contain 1 element if no
   * type was specified.
   *
   * @return string[]
   */
  public function getArguments() {
    if (empty($this->arguments)) {
      return array();
    }
    $arguments = explode(',', $this->arguments);
    foreach ($arguments as $key => $value) {
      $arguments[$key] = explode(' ', trim($value));
    }
    return $arguments;
  }

  /**
   * Checks whether the method tag describes a static method or not.
   *
   * @return bool TRUE if the method declaration is for a static method, FALSE
   *     otherwise.
   */
  public function isStatic() {
    return $this->isStatic;
  }

  /**
   * Sets a new value for whether the method is static or not.
   *
   * @param bool $isStatic The new value to set.
   *
   * @return $this
   */
  public function setIsStatic($isStatic) {
    $this->isStatic = $isStatic;
    $this->content = null;
    return $this;
  }

}

Classes

Namesort descending Description
MethodTag Reflection class for a @method in a Docblock.