3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php interface PolicyRule { public function isSatisfiedBy(string $aValue); } class CredentialPolicy implements PolicyRule { private $maximumDaysOld; private $policyRules = []; public function __construct(array $aPolicyRuleSet) { foreach ($aPolicyRuleSet as $rule) { if ($rule instanceof PolicyRule && $rule !== $this) { $this->policyRules[] = $rule; } } } public function isSatisfiedBy(string $aCredential) : bool { foreach ($this->policyRules as $rule) { if (! $rule->isSatisfiedBy($aCredential)) { return false; } } return true; } } abstract class EnforcedRule implements PolicyRule { const UNENFORCED = 0; const ENFORCED = 1; private $enforcementType; protected function isEnforced() : bool { return ($this->enforcementType == self::ENFORCED); } protected function setEnforcementType(int $aType) { $this->guardEnforcementType($aType); $this->enforcementType = $aType; } protected function guardEnforcementType(int $aType) { if (! in_array($aType, [self::UNENFORCED, self::ENFORCED])) { throw new InvalidEnforcementTypeException($aType); } } } abstract class MinimumCharacterCountRule extends EnforcedRule { const DEFAULT_MINIMUM = 1; protected $regexPattern; protected $minimumCount = self::DEFAULT_MINIMUM; public function isSatisfiedBy(string $aValue) : bool { if (! $this->isEnforced()) { return true; } $matches = []; preg_match_all($this->regexPattern, $aValue, $matches); return (count($matches[0]) >= $this->minimumCount); } } class NumericRule extends MinimumCharacterCountRule { protected $regexPattern = '/[0-9]/'; public function __construct(int $aMinimumCount = self::DEFAULT_MINIMUM, int $anEnforcementType = self::ENFORCED) { $this->setEnforcementType($anEnforcementType); $this->minimumCount = $aMinimumCount; } } class SpecialCharacterRule extends MinimumCharacterCountRule { protected $regexPattern = '/[~`#\$%\^&\*\(\)\-_\+\|,\.<>]/'; public function __construct(int $aMinimumCount = self::DEFAULT_MINIMUM, int $anEnforcementType = self::ENFORCED) { $this->setEnforcementType($anEnforcementType); $this->minimumCount = $aMinimumCount; } } $policy = new CredentialPolicy([ new NumericRule(), new SpecialCharacterRule() ]); var_dump($policy->isSatisfiedBy("for5"));
based on FJeQF
Output for 7.0.0 - 7.2.0
bool(false)
Output for 5.4.9 - 5.4.26, 5.4.28 - 5.6.28
Parse error: syntax error, unexpected ':', expecting ';' or '{' in /in/rgRk9 on line 22
Process exited with code 255.
Output for 5.4.27

Process exited with code 137.
Output for 5.3.19 - 5.3.29
Parse error: syntax error, unexpected '[' in /in/rgRk9 on line 11
Process exited with code 255.