12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <?php
- require_once(__DIR__ . '/FormatInterface.php');
- class Format {
- static protected $dirFormat;
- public function __construct(){
- throw new \LogicException('Please use ' . __CLASS__ . '::create for new object.');
- }
- static public function create($nameFormat){
- if(!preg_match('@^[A-Z][a-zA-Z]*$@', $nameFormat)) {
- throw new \InvalidArgumentException('Name format must be at least
- one uppercase follow or not by alphabetic characters.');
- }
- $nameFormat = $nameFormat . 'Format';
- $pathFormat = self::getDir() . $nameFormat . '.php';
- if(!file_exists($pathFormat)) {
- throw new \Exception('The format you looking for does not exist.');
- }
- require_once $pathFormat;
- return new $nameFormat();
- }
- static public function setDir($dirFormat){
- if(!is_string($dirFormat)) {
- throw new \InvalidArgumentException('Dir format must be a string.');
- }
- if(!file_exists($dirFormat)) {
- throw new \Exception('Dir format does not exist.');
- }
- self::$dirFormat = $dirFormat;
- }
- static public function getDir(){
- $dirFormat = self::$dirFormat;
- if(is_null($dirFormat)) {
- throw new \LogicException(__CLASS__ . ' class need to know format path !');
- }
- return $dirFormat;
- }
- /**
- * Read format dir and catch informations about each format depending annotation
- * @return array Informations about each format
- */
- static public function searchInformation(){
- $pathDirFormat = self::getDir();
- $listFormat = array();
- $searchCommonPattern = array('name');
- $dirFiles = scandir($pathDirFormat);
- if($dirFiles !== false) {
- foreach($dirFiles as $fileName) {
- if(preg_match('@^([^.]+)Format\.php$@U', $fileName, $out)) { // Is PHP file ?
- $listFormat[] = $out[1];
- }
- }
- }
- return $listFormat;
- }
- }
|