fork download
  1. <?php
  2. $re = '/{(?>[^{}]|(?R))*\}/m';
  3. $str = 'namespace Hal\\Metric;
  4.  
  5. use JsonSerializable;
  6.  
  7. class PackageMetric implements Metric, JsonSerializable
  8. {
  9. use BagTrait;
  10.  
  11. /** @return string[] */
  12. public function getClasses()
  13. {
  14. return $this->has(\'classes\') ? $this->get(\'classes\') : [];
  15. }
  16.  
  17. /** @param string $name */
  18. public function addClass($name)
  19. {
  20. $elements = $this->get(\'classes\');
  21. $elements[] = (string) $name;
  22. $this->set(\'classes\', $elements);
  23. }
  24.  
  25. /** @param float $abstraction */
  26. public function setAbstraction($abstraction)
  27. {
  28. if ($abstraction !== null) {
  29. $abstraction = (float) $abstraction;
  30. }
  31. $this->set(\'abstraction\', $abstraction);
  32. }
  33.  
  34. /** @return float|null */
  35. public function getAbstraction()
  36. {
  37. return $this->get(\'abstraction\');
  38. }
  39.  
  40. /** @param float $instability */
  41. public function setInstability($instability)
  42. {
  43. if ($instability !== null) {
  44. $instability = (float) $instability;
  45. }
  46. $this->set(\'instability\', $instability);
  47. }
  48.  
  49. /** @return float|null */
  50. public function getInstability()
  51. {
  52. return $this->get(\'instability\');
  53. }
  54.  
  55. /**
  56. * @param string $className
  57. * @param string $packageName
  58. */
  59. public function addOutgoingClassDependency($className, $packageName)
  60. {
  61. if ($packageName === $this->getName()) {
  62. return;
  63. }
  64. $classDependencies = $this->getOutgoingClassDependencies();
  65. $packageDependencies = $this->getOutgoingPackageDependencies();
  66. if (! in_array($className, $classDependencies)) {
  67. $classDependencies[] = $className;
  68. $this->set(\'outgoing_class_dependencies\', $classDependencies);
  69. }
  70. if (! in_array($packageName, $packageDependencies)) {
  71. $packageDependencies[] = $packageName;
  72. $this->set(\'outgoing_package_dependencies\', $packageDependencies);
  73. }
  74.  
  75. }
  76.  
  77. /** @return string[] */
  78. public function getOutgoingClassDependencies()
  79. {
  80. return $this->has(\'outgoing_class_dependencies\') ? $this->get(\'outgoing_class_dependencies\') : [];
  81. }
  82.  
  83. /** @return string[] */
  84. public function getOutgoingPackageDependencies()
  85. {
  86. return $this->has(\'outgoing_package_dependencies\') ? $this->get(\'outgoing_package_dependencies\') : [];
  87. }
  88.  
  89. /**
  90. * @param string $className
  91. * @param string $packageName
  92. */
  93. public function addIncomingClassDependency($className, $packageName)
  94. {
  95. if ($packageName === $this->getName()) {
  96. return;
  97. }
  98. $classDependencies = $this->getIncomingClassDependencies();
  99. $packageDependencies = $this->getIncomingPackageDependencies();
  100. if (! in_array($className, $classDependencies)) {
  101. $classDependencies[] = $className;
  102. $this->set(\'incoming_class_dependencies\', $classDependencies);
  103. }
  104. if (! in_array($packageName, $packageDependencies)) {
  105. $packageDependencies[] = $packageName;
  106. $this->set(\'incoming_package_dependencies\', $packageDependencies);
  107. }
  108.  
  109. }
  110.  
  111. /** @return string[] */
  112. public function getIncomingClassDependencies()
  113. {
  114. return $this->has(\'incoming_class_dependencies\') ? $this->get(\'incoming_class_dependencies\') : [];
  115. }
  116.  
  117. /** @return string[] */
  118. public function getIncomingPackageDependencies()
  119. {
  120. return $this->has(\'incoming_package_dependencies\') ? $this->get(\'incoming_package_dependencies\') : [];
  121. }
  122.  
  123. /** @param float $normalizedDistance */
  124. public function setNormalizedDistance($normalizedDistance)
  125. {
  126. $this->set(\'distance\', $normalizedDistance / sqrt(2.0));
  127. $this->set(\'normalized_distance\', $normalizedDistance);
  128. }
  129.  
  130. /** @return float|null */
  131. public function getDistance()
  132. {
  133. return $this->get(\'distance\');
  134. }
  135.  
  136. /** @return float|null */
  137. public function getNormalizedDistance()
  138. {
  139. return $this->get(\'normalized_distance\');
  140. }
  141.  
  142. /** @param float[] $instabilities */
  143. public function setDependentInstabilities(array $instabilities)
  144. {
  145. $this->set(\'dependent_instabilities\', $instabilities);
  146. }
  147.  
  148. /** @return float[] */
  149. public function getDependentInstabilities()
  150. {
  151. return $this->has(\'dependent_instabilities\') ? $this->get(\'dependent_instabilities\') : [];
  152. }
  153. }';
  154.  
  155.  
  156. //preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
  157. if (preg_match_all($re, $str, $matches)) {
  158. echo 'Success\n';
  159. } else {
  160. echo 'Not working\n';
  161. }
  162.  
  163. // Print the entire match result
  164. var_dump($matches);
Success #stdin #stdout 0.02s 23780KB
stdin
Standard input is empty
stdout
Success\narray(1) {
  [0]=>
  array(1) {
    [0]=>
    string(4339) "{
    use BagTrait;

    /** @return string[] */
    public function getClasses()
    {
        return $this->has('classes') ? $this->get('classes') : [];
    }

    /** @param string $name */
    public function addClass($name)
    {
        $elements = $this->get('classes');
        $elements[] = (string) $name;
        $this->set('classes', $elements);
    }

    /** @param float $abstraction */
    public function setAbstraction($abstraction)
    {
        if ($abstraction !== null) {
            $abstraction = (float) $abstraction;
        }
        $this->set('abstraction', $abstraction);
    }

    /** @return float|null */
    public function getAbstraction()
    {
        return $this->get('abstraction');
    }

    /** @param float $instability */
    public function setInstability($instability)
    {
        if ($instability !== null) {
            $instability = (float) $instability;
        }
        $this->set('instability', $instability);
    }

    /** @return float|null */
    public function getInstability()
    {
        return $this->get('instability');
    }

    /**
     * @param string $className
     * @param string $packageName
     */
    public function addOutgoingClassDependency($className, $packageName)
    {
        if ($packageName === $this->getName()) {
            return;
        }
        $classDependencies = $this->getOutgoingClassDependencies();
        $packageDependencies = $this->getOutgoingPackageDependencies();
        if (! in_array($className, $classDependencies)) {
            $classDependencies[] = $className;
            $this->set('outgoing_class_dependencies', $classDependencies);
        }
        if (! in_array($packageName, $packageDependencies)) {
            $packageDependencies[] = $packageName;
            $this->set('outgoing_package_dependencies', $packageDependencies);
        }

    }

    /** @return string[] */
    public function getOutgoingClassDependencies()
    {
        return $this->has('outgoing_class_dependencies') ? $this->get('outgoing_class_dependencies') : [];
    }

    /** @return string[] */
    public function getOutgoingPackageDependencies()
    {
        return $this->has('outgoing_package_dependencies') ? $this->get('outgoing_package_dependencies') : [];
    }

    /**
     * @param string $className
     * @param string $packageName
     */
    public function addIncomingClassDependency($className, $packageName)
    {
        if ($packageName === $this->getName()) {
            return;
        }
        $classDependencies = $this->getIncomingClassDependencies();
        $packageDependencies = $this->getIncomingPackageDependencies();
        if (! in_array($className, $classDependencies)) {
            $classDependencies[] = $className;
            $this->set('incoming_class_dependencies', $classDependencies);
        }
        if (! in_array($packageName, $packageDependencies)) {
            $packageDependencies[] = $packageName;
            $this->set('incoming_package_dependencies', $packageDependencies);
        }

    }

    /** @return string[] */
    public function getIncomingClassDependencies()
    {
        return $this->has('incoming_class_dependencies') ? $this->get('incoming_class_dependencies') : [];
    }

    /** @return string[] */
    public function getIncomingPackageDependencies()
    {
        return $this->has('incoming_package_dependencies') ? $this->get('incoming_package_dependencies') : [];
    }

    /** @param float $normalizedDistance */
    public function setNormalizedDistance($normalizedDistance)
    {
        $this->set('distance', $normalizedDistance / sqrt(2.0));
        $this->set('normalized_distance', $normalizedDistance);
    }

    /** @return float|null */
    public function getDistance()
    {
        return $this->get('distance');
    }

    /** @return float|null */
    public function getNormalizedDistance()
    {
        return $this->get('normalized_distance');
    }

    /** @param float[] $instabilities */
    public function setDependentInstabilities(array $instabilities)
    {
        $this->set('dependent_instabilities', $instabilities);
    }

    /** @return float[] */
    public function getDependentInstabilities()
    {
        return $this->has('dependent_instabilities') ? $this->get('dependent_instabilities') : [];
    }
}"
  }
}