primo commit
This commit is contained in:
		
							
								
								
									
										76
									
								
								libraries/regularlabs/src/ObjectHelper.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								libraries/regularlabs/src/ObjectHelper.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,76 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * @package         Regular Labs Library | ||||
|  * @version         24.11.1459 | ||||
|  *  | ||||
|  * @author          Peter van Westen <info@regularlabs.com> | ||||
|  * @link            https://regularlabs.com | ||||
|  * @copyright       Copyright © 2024 Regular Labs All Rights Reserved | ||||
|  * @license         GNU General Public License version 2 or later | ||||
|  */ | ||||
| namespace RegularLabs\Library; | ||||
|  | ||||
| defined('_JEXEC') or die; | ||||
| use RegularLabs\Scoped\DeepCopy\DeepCopy; | ||||
| require_once dirname(__FILE__, 2) . '/vendor/autoload.php'; | ||||
| class ObjectHelper | ||||
| { | ||||
|     /** | ||||
|      * Change the case of object keys | ||||
|      * $key_format: 'camel', 'dash', 'dot', 'underscore' | ||||
|      */ | ||||
|     public static function changeKeyCase(object|array|null $object, $format, bool $to_lowercase = \true): object | ||||
|     { | ||||
|         return (object) \RegularLabs\Library\ArrayHelper::applyMethodToKeys([$object, $format, $to_lowercase], '\RegularLabs\Library\StringHelper', 'toCase'); | ||||
|     } | ||||
|     /** | ||||
|      * Deep clone an object | ||||
|      */ | ||||
|     public static function clone(object $object): object | ||||
|     { | ||||
|         return (new DeepCopy())->copy($object); | ||||
|     } | ||||
|     /** | ||||
|      * Return the value by the object property key | ||||
|      * A list of keys can be given. The first one that is not empty will get returned | ||||
|      */ | ||||
|     public static function getValue(object $object, string|array $keys, mixed $default = null): mixed | ||||
|     { | ||||
|         $keys = \RegularLabs\Library\ArrayHelper::toArray($keys); | ||||
|         foreach ($keys as $key) { | ||||
|             if (empty($object->{$key})) { | ||||
|                 continue; | ||||
|             } | ||||
|             return $object->{$key}; | ||||
|         } | ||||
|         return $default; | ||||
|     } | ||||
|     /** | ||||
|      * Merge 2 objects | ||||
|      */ | ||||
|     public static function merge(object $object1, object $object2): object | ||||
|     { | ||||
|         return (object) [...(array) $object1, ...(array) $object2]; | ||||
|     } | ||||
|     /** | ||||
|      * Replace key names | ||||
|      */ | ||||
|     public static function replaceKeys(string|object $object, array $replacements, bool $include_prefixes = \false, string $prefix_delimiter = '_'): string|object | ||||
|     { | ||||
|         $json = json_encode($object); | ||||
|         foreach ($replacements as $to => $froms) { | ||||
|             if (!is_array($froms)) { | ||||
|                 $froms = [$froms]; | ||||
|             } | ||||
|             foreach ($froms as $from) { | ||||
|                 $json = str_replace('"' . $from . '":', '"' . $to . '":', $json); | ||||
|                 if (!$include_prefixes) { | ||||
|                     continue; | ||||
|                 } | ||||
|                 $json = \RegularLabs\Library\RegEx::replace('"' . \RegularLabs\Library\RegEx::quote($from . $prefix_delimiter) . '([^"]+":)', '"' . $to . $prefix_delimiter . '\1', $json); | ||||
|             } | ||||
|         } | ||||
|         return json_decode($json); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user