Skip to content

Commit 580cdf2

Browse files
committed
fixing functions and removing callback work; will require additional thinking
1 parent 205d5b3 commit 580cdf2

File tree

4 files changed

+26
-133
lines changed

4 files changed

+26
-133
lines changed

files/functions.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function object_merge_value_undefined($value)
3636
*/
3737
function object_merge(stdClass ...$objects)
3838
{
39-
return ObjectMerge::merge($objects);
39+
return ObjectMerge::merge(...$objects);
4040
}
4141
}
4242
if (!function_exists('object_merge_recursive')) {
@@ -46,7 +46,7 @@ function object_merge(stdClass ...$objects)
4646
*/
4747
function object_merge_recursive(stdClass ...$objects)
4848
{
49-
return ObjectMerge::mergeRecursive($objects);
49+
return ObjectMerge::mergeRecursive(...$objects);
5050
}
5151
}
5252
if (!function_exists('object_merge_opts')) {
@@ -57,7 +57,7 @@ function object_merge_recursive(stdClass ...$objects)
5757
*/
5858
function object_merge_opts($opts, stdClass ...$objects)
5959
{
60-
return ObjectMerge::mergeOpts($opts, $objects);
60+
return ObjectMerge::mergeOpts($opts, ...$objects);
6161
}
6262
}
6363
if (!function_exists('object_merge_recursive_opts')) {
@@ -68,6 +68,6 @@ function object_merge_opts($opts, stdClass ...$objects)
6868
*/
6969
function object_merge_recursive_opts($opts, stdClass ...$objects)
7070
{
71-
return ObjectMerge::mergeRecursiveOpts($opts, $objects);
71+
return ObjectMerge::mergeRecursiveOpts($opts, ...$objects);
7272
}
7373
}

src/ObjectMerge.php

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* limitations under the License.
1919
*/
2020

21+
use LogicException;
2122
use stdClass;
2223
use UnexpectedValueException;
2324

@@ -57,7 +58,7 @@ class ObjectMerge
5758
*/
5859
public function __invoke(stdClass ...$objects)
5960
{
60-
return self::doMerge(false, self::DEFAULT_OPTS, null, $objects);
61+
return self::doMerge(false, self::DEFAULT_OPTS, $objects);
6162
}
6263

6364
/**
@@ -66,7 +67,7 @@ public function __invoke(stdClass ...$objects)
6667
*/
6768
public static function merge(stdClass ...$objects)
6869
{
69-
return self::doMerge(false, self::DEFAULT_OPTS, null, $objects);
70+
return self::doMerge(false, self::DEFAULT_OPTS, $objects);
7071
}
7172

7273
/**
@@ -75,7 +76,7 @@ public static function merge(stdClass ...$objects)
7576
*/
7677
public static function mergeRecursive(stdClass ...$objects)
7778
{
78-
return self::doMerge(true, self::DEFAULT_OPTS, null, $objects);
79+
return self::doMerge(true, self::DEFAULT_OPTS, $objects);
7980
}
8081

8182
/**
@@ -85,7 +86,7 @@ public static function mergeRecursive(stdClass ...$objects)
8586
*/
8687
public static function mergeOpts($opts, stdClass ...$objects)
8788
{
88-
return self::doMerge(false, $opts, null, $objects);
89+
return self::doMerge(false, $opts, $objects);
8990
}
9091

9192
/**
@@ -95,7 +96,7 @@ public static function mergeOpts($opts, stdClass ...$objects)
9596
*/
9697
public static function mergeRecursiveOpts($opts, stdClass ...$objects)
9798
{
98-
return self::doMerge(true, $opts, null, $objects);
99+
return self::doMerge(true, $opts, $objects);
99100
}
100101

101102
/**
@@ -153,22 +154,20 @@ private static function compareTypes($left, $right)
153154
/**
154155
* @param bool $recurse
155156
* @param int $opts
156-
* @param callable $cb
157-
* @param string|int $key
158157
* @param array $leftValue
159158
* @param array $rightValue
160159
* @return array
161160
*/
162-
private static function mergeArrayValues($recurse, $opts, $cb, $key, array $leftValue, array $rightValue)
161+
private static function mergeArrayValues($recurse, $opts, array $leftValue, array $rightValue)
163162
{
164163
$out = array_merge($leftValue, $rightValue);
165164

166165
foreach ($out as $i => &$v) {
167166
$vt = gettype($v);
168167
if (self::OBJECT_T === $vt) {
169-
$v = self::mergeObjectValues($recurse, $opts, $cb, $i, new stdClass(), $v);
168+
$v = self::mergeObjectValues($recurse, $opts, new stdClass(), $v);
170169
} elseif (self::ARRAY_T === $vt) {
171-
$v = self::mergeArrayValues($recurse, $opts, $cb, $i, [], $v);
170+
$v = self::mergeArrayValues($recurse, $opts, [], $v);
172171
}
173172
}
174173

@@ -182,22 +181,20 @@ private static function mergeArrayValues($recurse, $opts, $cb, $key, array $left
182181
/**
183182
* @param bool $recurse
184183
* @param int $opts
185-
* @param callable $cb
186-
* @param string|int $key
187184
* @param stdClass $leftValue
188185
* @param stdClass $rightValue
189186
* @return stdClass
190187
*/
191-
private static function mergeObjectValues($recurse, $opts, $cb, $key, stdClass $leftValue, stdClass $rightValue)
188+
private static function mergeObjectValues($recurse, $opts, stdClass $leftValue, stdClass $rightValue)
192189
{
193190
$out = new stdClass();
191+
194192
foreach (array_merge(get_object_vars($leftValue), get_object_vars($rightValue)) as $k => $v) {
195193
$leftDefined = property_exists($leftValue, $k);
196194
$rightDefined = property_exists($rightValue, $k);
197195
$out->{$k} = self::mergeValues(
198196
$recurse,
199197
$opts,
200-
$cb,
201198
$k,
202199
$leftDefined ? $leftValue->{$k} : OBJECT_MERGE_UNDEFINED,
203200
$rightDefined ? $rightValue->{$k} : OBJECT_MERGE_UNDEFINED
@@ -209,19 +206,18 @@ private static function mergeObjectValues($recurse, $opts, $cb, $key, stdClass $
209206
/**
210207
* @param bool $recurse
211208
* @param int $opts
212-
* @param callable $cb
213209
* @param string|int $key
214210
* @param mixed $leftValue
215211
* @param mixed $rightValue
216-
* @return mixed
212+
* @return array|stdClass
217213
*/
218-
private static function mergeValues($recurse, $opts, $cb, $key, $leftValue, $rightValue)
214+
private static function mergeValues($recurse, $opts, $key, $leftValue, $rightValue)
219215
{
220216
$leftUndefined = OBJECT_MERGE_UNDEFINED === $leftValue;
221217
$rightUndefined = OBJECT_MERGE_UNDEFINED === $rightValue;
222218

223219
if ($leftUndefined && $rightUndefined) {
224-
throw new \LogicException(
220+
throw new LogicException(
225221
sprintf(
226222
'Both left and right values are "undefined": $recurse=%s; $opts=%d; $key=%s',
227223
$recurse ? 'true' : 'false',
@@ -260,20 +256,19 @@ private static function mergeValues($recurse, $opts, $cb, $key, $leftValue, $rig
260256
}
261257

262258
if (self::ARRAY_T === $leftType) {
263-
return self::mergeArrayValues($recurse, $opts, $cb, $key, $leftValue, $rightValue);
259+
return self::mergeArrayValues($recurse, $opts, $leftValue, $rightValue);
264260
}
265261

266-
return self::mergeObjectValues($recurse, $opts, $cb, $key, $leftValue, $rightValue);
262+
return self::mergeObjectValues($recurse, $opts, $leftValue, $rightValue);
267263
}
268264

269265
/**
270266
* @param bool $recurse
271267
* @param int $opts
272-
* @param callable $cb
273268
* @param array $objects
274269
* @return mixed|null
275270
*/
276-
private static function doMerge($recurse, $opts, $cb, array $objects)
271+
private static function doMerge($recurse, $opts, array $objects)
277272
{
278273
if ([] === $objects) {
279274
return null;
@@ -291,7 +286,7 @@ private static function doMerge($recurse, $opts, $cb, array $objects)
291286
continue;
292287
}
293288

294-
$root = self::mergeObjectValues($recurse, $opts, $cb, null, $root, $object);
289+
$root = self::mergeObjectValues($recurse, $opts, $root, $object);
295290
}
296291

297292
return $root;

src/ObjectMergeResult.php

Lines changed: 0 additions & 101 deletions
This file was deleted.

tests/ObjectMergeTest.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
* limitations under the License.
1919
*/
2020

21-
use DCarbone\ObjectMerge;
2221
use PHPUnit\Framework\TestCase;
2322
use RuntimeException;
2423
use stdClass;
@@ -158,14 +157,14 @@ public function testObjectMerge()
158157
$expected = $this->doDecode($i, $test['expected']);
159158
if (isset($test['recurse']) && $test['recurse']) {
160159
if (isset($test['opts'])) {
161-
$actual = ObjectMerge::mergeRecursiveOpts($test['opts'], ...$objects);
160+
$actual = object_merge_recursive_opts($test['opts'], ...$objects);
162161
} else {
163-
$actual = ObjectMerge::mergeRecursive(...$objects);
162+
$actual = object_merge_recursive(...$objects);
164163
}
165164
} elseif (isset($test['opts'])) {
166-
$actual = ObjectMerge::mergeOpts($test['opts'], ...$objects);
165+
$actual = object_merge_opts($test['opts'], ...$objects);
167166
} else {
168-
$actual = ObjectMerge::merge(...$objects);
167+
$actual = object_merge(...$objects);
169168
}
170169
$this->assertEquals($expected, $actual);
171170
}

0 commit comments

Comments
 (0)