コード例 #1
0
ファイル: PropertyPath.php プロジェクト: sledgehammer/core
 /**
  * Retrieve $path from $data.
  *
  * @param string       $path
  * @param array|object $data
  *
  * @return mixed
  */
 public static function get($path, $data)
 {
     if (is_string($path) === false) {
         \Sledgehammer\deprecated('The $path & $data parameters were swapped');
         $tmp = $data;
         $data = $path;
         $path = $tmp;
     }
     $parts = self::parse($path);
     foreach ($parts as $part) {
         switch ($part[0]) {
             case self::TYPE_ANY:
                 if (is_object($data)) {
                     $data = $data->{$part[1]};
                 } elseif (is_array($data)) {
                     $data = $data[$part[1]];
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an object or array');
                     return;
                 }
                 break;
             case self::TYPE_ELEMENT:
                 if (is_array($data) || is_object($data) && $data instanceof ArrayAccess) {
                     $data = $data[$part[1]];
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an array');
                     return;
                 }
                 break;
             case self::TYPE_PROPERTY:
                 if (is_object($data)) {
                     $data = $data->{$part[1]};
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an object');
                     return;
                 }
                 break;
             case self::TYPE_METHOD:
                 if (is_object($data)) {
                     $data = $data->{$part[1]}();
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an object');
                     return;
                 }
                 break;
             case self::TYPE_OPTIONAL:
                 if (is_object($data)) {
                     if (isset($data->{$part[1]})) {
                         $data = $data->{$part[1]};
                     } else {
                         return;
                     }
                 } elseif (is_array($data)) {
                     if (array_key_exists($part[1], $data)) {
                         $data = $data[$part[1]];
                     } else {
                         return;
                     }
                 } else {
                     return;
                 }
                 break;
             case self::TYPE_OPTIONAL_ELEMENT:
                 if (is_array($data) || is_object($data) && ($data instanceof ArrayAccess || $data instanceof SimpleXMLElement)) {
                     if (isset($data[$part[1]])) {
                         $data = $data[$part[1]];
                     } else {
                         return;
                     }
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an array');
                     return;
                 }
                 break;
             case self::TYPE_OPTIONAL_PROPERTY:
                 if (is_object($data)) {
                     if (isset($data->{$part[1]})) {
                         $data = $data->{$part[1]};
                     } else {
                         return;
                     }
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an object');
                     return;
                 }
                 break;
             case self::TYPE_SUBPATH:
                 if (is_object($data) || is_array($data)) {
                     $items = [];
                     foreach ($data as $key => $item) {
                         $items[$key] = self::get($part[1], $item);
                     }
                     return $items;
                 } else {
                     \Sledgehammer\notice('Unexpected type: ' . gettype($data) . ', expecting an object or array');
                     return;
                 }
                 break;
             case self::TYPE_SELF:
                 return $data;
             default:
                 throw new Exception('Unsupported type: ' . $part[0]);
         }
     }
     return $data;
 }
コード例 #2
0
ファイル: Autoloader.php プロジェクト: sledgehammer/core
 /**
  * Import definitions inside a module.
  * Uses strict validation rules when the module contains a classes folder.
  *
  * @param array $module
  */
 public function importModule($module)
 {
     \Sledgehammer\deprecated('importModule is deprecated in favor of importFolder()');
     $path = $module['path'];
     if (file_exists($module['path'] . 'classes')) {
         $path = $path . 'classes';
         $settings = $this->settings;
         // Strict settings
     } else {
         // Disable validations
         $settings = array('matching_filename' => false, 'mandatory_definition' => false, 'mandatory_superclass' => false, 'one_definition_per_file' => false, 'revalidate_cache_delay' => 20, 'detect_accidental_output' => false);
     }
     $this->importFolder($path, $settings);
 }