This repository has been archived by the owner on Jan 29, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 79
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/169' into develop
Close #169
- Loading branch information
Showing
4 changed files
with
308 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
<?php | ||
|
||
namespace Zend\Code; | ||
|
||
use Zend\Code\Exception\InvalidArgumentException; | ||
|
||
class DeclareStatement | ||
{ | ||
public const TICKS = 'ticks'; | ||
public const STRICT_TYPES = 'strict_types'; | ||
public const ENCODING = 'encoding'; | ||
|
||
private const ALLOWED = [ | ||
self::TICKS => 'integer', | ||
self::STRICT_TYPES => 'integer', | ||
self::ENCODING => 'string', | ||
]; | ||
|
||
/** | ||
* @var string | ||
*/ | ||
protected $directive; | ||
|
||
/** | ||
* @var int|string | ||
*/ | ||
protected $value; | ||
|
||
private function __construct(string $directive, $value) | ||
{ | ||
$this->directive = $directive; | ||
$this->value = $value; | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public function getDirective(): string | ||
{ | ||
return $this->directive; | ||
} | ||
|
||
/** | ||
* @return int|string | ||
*/ | ||
public function getValue() | ||
{ | ||
return $this->value; | ||
} | ||
|
||
/** | ||
* @param int $value | ||
* @return self | ||
*/ | ||
public static function ticks(int $value): self | ||
{ | ||
return new self(self::TICKS, $value); | ||
} | ||
|
||
/** | ||
* @param int $value | ||
* @return self | ||
*/ | ||
public static function strictTypes(int $value): self | ||
{ | ||
return new self(self::STRICT_TYPES, $value); | ||
} | ||
|
||
/** | ||
* @param string $value | ||
* @return self | ||
*/ | ||
public static function encoding(string $value): self | ||
{ | ||
return new self(self::ENCODING, $value); | ||
} | ||
|
||
public static function fromArray(array $config): self | ||
{ | ||
$directive = key($config); | ||
$value = $config[$directive]; | ||
|
||
if (! isset(self::ALLOWED[$directive])) { | ||
throw new InvalidArgumentException( | ||
sprintf( | ||
'Declare directive must be one of: %s.', | ||
implode(', ', array_keys(self::ALLOWED)) | ||
) | ||
); | ||
} | ||
|
||
if (gettype($value) !== self::ALLOWED[$directive]) { | ||
throw new InvalidArgumentException( | ||
sprintf( | ||
'Declare value invalid. Expected %s, got %s.', | ||
self::ALLOWED[$directive], | ||
gettype($value) | ||
) | ||
); | ||
} | ||
|
||
$method = str_replace('_', '', lcfirst(ucwords($directive, '_'))); | ||
|
||
return self::{$method}($value); | ||
} | ||
|
||
/** | ||
* @return string | ||
*/ | ||
public function getStatement(): string | ||
{ | ||
$value = is_string($this->value) ? '\'' . $this->value . '\'' : $this->value; | ||
|
||
return sprintf('declare(%s=%s);', $this->directive, $value); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters