Files
conservatorio-tomadini/libraries/regularlabs/src/ObjectHelper.php
2024-12-17 17:34:10 +01:00

77 lines
2.6 KiB
PHP

<?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);
}
}