Skip to content

Commit

Permalink
https://github.com/mage2pro/core/issues/295
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitrii-fediuk committed Jul 29, 2023
1 parent fc829f1 commit 36c7385
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 33 deletions.
2 changes: 1 addition & 1 deletion Core/Helper/Text.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ function removeLineBreaks(string $s):string {return str_replace(["\r\n", "\r", "
* The length of str will be the same as the return value's.»
* https://php.net/strtr
* Новый алгоритм взял отсюда: http://stackoverflow.com/a/20717751
* @used-by df_extend()
* @used-by dfa_merge_r()
*/
function singleLine(string $s):string {return str_replace(["\r\n", "\r", "\n", "\t"], ' ', $s);}

Expand Down
40 changes: 20 additions & 20 deletions Core/lib/array/merge.php
Original file line number Diff line number Diff line change
@@ -1,36 +1,45 @@
<?php
use Df\Core\Exception as DFE;

/**
* Оба входных массива должны быть ассоциативными
* 2022-10-31 @deprecated It is unused.
* @param array(string => mixed) $a1
* @param array(string => mixed) $a2
* @return array(string => mixed)
*/
function df_merge_not_empty(array $a1, array $a2):array {return array_filter($a2) + $a1;}

/**
* 2015-02-18
* 1) По смыслу функция @see df_extend() аналогична методу @see \Magento\Framework\Simplexml\Element::extend()
* 1) По смыслу функция @see dfa_merge_r() аналогична методу @see \Magento\Framework\Simplexml\Element::extend()
* и предназначена для слияния настроечных опций,
* только, в отличие от @see \Magento\Framework\Simplexml\Element::extend(),
* @see df_extend() сливает не XML, а ассоциативные массивы.
* 3) Вместо @see df_extend() нельзя использовать ни
* @see dfa_merge_r() сливает не XML, а ассоциативные массивы.
* 3) Вместо @see dfa_merge_r() нельзя использовать ни
* @see array_replace_recursive(), ни @see array_merge_recursive(),
* ни тем более @see array_replace() и @see array_merge()
* 3.1) Нерекурсивные аналоги отметаются сразу, потому что не способны сливать вложенные структуры.
* 3.2) Но и стандартные рекурсивные функции тоже не подходят:
* 3.2.1) array_merge_recursive(['width' => 180], ['width' => 200]) вернёт: ['width' => [180, 200]]
* https://php.net/manual/function.array-merge-recursive.php
* 3.2.2) Наша функция df_extend(['width' => 180], ['width' => 200])вернёт ['width' => 200]
* 3.2.2) Наша функция dfa_merge_r(['width' => 180], ['width' => 200]) вернёт ['width' => 200]
* 3.2.3) array_replace_recursive(['x' => ['A', 'B']], ['x' => 'C']) вернёт: ['x' => ['С', 'B']]
* https://php.net/manual/function.array-replace-recursive.php
* 3.2.4) Наша функция df_extend(['x' => ['A', 'B']], ['x' => 'C']) вернёт ['x' => 'C']
* 3.2.4) Наша функция dfa_merge_r(['x' => ['A', 'B']], ['x' => 'C']) вернёт ['x' => 'C']
* 2018-11-13
* 1) df_extend(
* 1) dfa_merge_r(
* ['TBCBank' => ['1111' => ['a' => 'b']]]
* ,['TBCBank' => ['2222' => ['c' => 'd']]]
* )
* is: 'TBCBank' => ['1111' => ['a' => 'b'], '2222' => ['c' => 'd']]
* 2) df_extend(
* 2) dfa_merge_r(
* ['TBCBank' => [1111 => ['a' => 'b']]]
* ,['TBCBank' => [2222 => ['c' => 'd']]]
* )
* is: 'TBCBank' => [1111 => ['a' => 'b'], 2222 => ['c' => 'd']]
* @used-by df_ci_add()
* @used-by df_extend()
* @used-by dfa_merge_r()
* @used-by df_log()
* @used-by df_log_l()
* @used-by df_oi_add()
Expand All @@ -42,7 +51,7 @@
* @return array(string => mixed)
* @throws DFE
*/
function df_extend(array $defaults, array $newValues):array {/** @var array(string => mixed) $r */
function dfa_merge_r(array $defaults, array $newValues):array {/** @var array(string => mixed) $r */
# Здесь ошибочно было бы $r = [], потому что если ключ отсутствует в $newValues, то тогда он не попадёт в $r.
$r = $defaults;
foreach ($newValues as $key => $newValue) {/** @var int|string $key */ /** @var mixed $newValue */
Expand All @@ -57,7 +66,7 @@ function df_extend(array $defaults, array $newValues):array {/** @var array(stri
}
}
elseif (is_array($newValue)) {
$r[$key] = df_extend($defaultValue, $newValue);
$r[$key] = dfa_merge_r($defaultValue, $newValue);
}
elseif (is_null($newValue)) {
unset($r[$key]);
Expand All @@ -66,7 +75,7 @@ function df_extend(array $defaults, array $newValues):array {/** @var array(stri
# Если значение по умолчанию является массивом, а новое значение не является массивом,
# то это наверняка говорит об ошибке программиста.
df_error(
"df_extend: the default value of key «{$key}» is an array {defaultValue},"
"dfa_merge_r: the default value of key «{$key}» is an array {defaultValue},"
. "\nbut the programmer mistakenly tries to substitute it"
. ' with the value {newValue} of type «{newType}».'
. "\nThe new value should be an array or `null`."
Expand All @@ -81,15 +90,6 @@ function df_extend(array $defaults, array $newValues):array {/** @var array(stri
return $r;
}

/**
* Оба входных массива должны быть ассоциативными
* 2022-10-31 @deprecated It is unused.
* @param array(string => mixed) $a1
* @param array(string => mixed) $a2
* @return array(string => mixed)
*/
function df_merge_not_empty(array $a1, array $a2):array {return array_filter($a2) + $a1;}

/**
* 2015-02-11
* Эта функция отличается от @see array_merge() только тем,
Expand Down
2 changes: 1 addition & 1 deletion Core/lib/text/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ function df_string_split(string $s):array {return preg_split("//u", $s, -1, PREG
function df_strings_are_equal_ci(string $s1, string $s2):bool {return 0 === strcmp(mb_strtolower($s1), mb_strtolower($s2));}

/**
* @used-by df_extend()
* @used-by dfa_merge_r()
* @used-by df_quote_double()
* @used-by df_quote_russian()
* @used-by df_quote_single()
Expand Down
4 changes: 2 additions & 2 deletions Customer/lib/info.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

/**
* 2016-08-22
* 2016-08-23 Если значением ключа в $info будет null, то предыдущий ключ удалится: @see df_extend()
* 2016-08-23 Если значением ключа в $info будет null, то предыдущий ключ удалится: @see dfa_merge_r()
* @see dfp_add_info()
* @used-by df_ci_save()
* @used-by \Df\Customer\Observer\CopyFieldset\OrderAddressToCustomer::execute()
* @param _DO|C $c
* @param array(string => mixed) $info
*/
function df_ci_add(_DO $c, array $info):void {
$c[Schema::F__DF] = df_json_encode(df_extend(df_eta(df_ci_get(null, $c)), $info));
$c[Schema::F__DF] = df_json_encode(dfa_merge_r(df_eta(df_ci_get(null, $c)), $info));
}

/**
Expand Down
2 changes: 1 addition & 1 deletion Qa/lib/dump.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
* @used-by df_assert_eq()
* @used-by df_bool()
* @used-by df_caller_m()
* @used-by df_extend()
* @used-by dfa_merge_r()
* @used-by df_log_l()
* @used-by df_sentry()
* @used-by df_type()
Expand Down
4 changes: 2 additions & 2 deletions Qa/lib/log.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
function df_log($v, $m = null, array $d = []):void {
$isE = $v instanceof E; /** @var bool $isE */
$m = $m ? df_module_name($m) : ($isE ? df_x_module($v) : df_caller_module());
df_log_l($m, ...($isE ? [$v, $d] : [!$d ? $v : (df_extend($d, is_array($v) ? $v : ['message' => $v])), []]));
df_log_l($m, ...($isE ? [$v, $d] : [!$d ? $v : (dfa_merge_r($d, is_array($v) ? $v : ['message' => $v])), []]));
df_sentry($m, $v, $d);
}

Expand Down Expand Up @@ -93,7 +93,7 @@ function df_log_l($m, $p2, $p3 = [], string $p4 = ''):void {
# "`df_log_l` does not log the context if the message is not an array":
# https://github.com/mage2pro/core/issues/289
df_map('df_dump', is_array($d)
? [df_extend($d, ['Mage2.PRO' => df_context()])]
? [dfa_merge_r($d, ['Mage2.PRO' => df_context()])]
: [$d, df_context()]) /** @uses df_dump() */
,!$e ? '' : ['EXCEPTION', QE::i($e)->report(), "\n\n"]
,($e ? null : "\n") . df_bt_s($e ?: 1)
Expand Down
2 changes: 1 addition & 1 deletion Qa/lib/validation/error.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ function df_abstract($caller):void {
* @used-by df_country_ctn()
* @used-by df_customer()
* @used-by df_date_from_db()
* @used-by df_extend()
* @used-by dfa_merge_r()
* @used-by df_fe_m()
* @used-by df_file_name()
* @used-by df_float()
Expand Down
2 changes: 1 addition & 1 deletion Sales/lib/order/info.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
* @param array(string => mixed) $info
*/
function df_oi_add(_DO $o, array $info):void {
$o[Schema::F__DF] = df_json_encode(df_extend(df_eta(df_oi_get(null, $o)), $info));
$o[Schema::F__DF] = df_json_encode(dfa_merge_r(df_eta(df_oi_get(null, $o)), $info));
}

/**
Expand Down
4 changes: 2 additions & 2 deletions Sentry/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ function captureMessage(string $m, array $d):void {$this->capture([
/**
* 2017-01-10
* 2019-05-20
* I intentionally use array_merge_recursive() instead of @see df_extend()
* I intentionally use array_merge_recursive() instead of @see dfa_merge_r()
* because I want values to be merged for a duplicate key.
* I is needed for @see df_sentry_extra_f()
* @used-by df_sentry_extra()
Expand Down Expand Up @@ -201,7 +201,7 @@ private function capture($data, array $trace = []):string {
* 2017-01-10
* 1) $this->tags — это теги, которые были заданы в конструкторе: @see self::__construct()
* Они имеют наинизший приоритет.
* 2) Намеренно использую здесь + вместо @see df_extend(),
* 2) Намеренно использую здесь + вместо @see dfa_merge_r(),
* потому что массив tags должен быть одномерным (и поэтому для него + достаточно),
* а массив extra хоть и может быть многомерен, однако вряд ли для нас имеет смысл
* слияние его элементов на внутренних уровнях вложенности.
Expand Down
4 changes: 2 additions & 2 deletions Sentry/lib/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,9 @@ function df_sentry($m, $v, array $extra = []):void {
$context = df_clean(['extra' => $extra]);
# 2017-01-09
if ($v instanceof DFE) {
$context = df_extend($context, $v->sentryContext());
$context = dfa_merge_r($context, $v->sentryContext());
}
$context = df_extend($d, $context);
$context = dfa_merge_r($d, $context);
if ($v instanceof E) {
# 2016-12-22 https://docs.sentry.io/clients/php/usage/#reporting-exceptions
df_sentry_m($m)->captureException($v, $context);
Expand Down

0 comments on commit 36c7385

Please sign in to comment.