Code Duplication    Length = 48-50 lines in 2 locations

src/voku/db/Result.php 2 locations

@@ 949-998 (lines=50) @@
946
     * @psalm-param class-string|object|null $class
947
     * @psalm-param array<int, mixed>|null $params
948
     */
949
    public function &fetchObject(
950
        $class = null,
951
        array $params = null,
952
        bool $reset = false
953
    ) {
954
        if ($reset) {
955
            $this->reset();
956
        }
957
958
        // fallback
959
        if (!$class || $class === 'stdClass') {
960
            $class = \stdClass::class;
961
        }
962
963
        $row = $this->fetch_assoc();
964
        $row = $row ? $this->cast($row) : false;
965
966
        if (!$row) {
967
            /** @noinspection PhpUnnecessaryLocalVariableInspection */
968
            $dataTmp = false;
969
970
            return $dataTmp;
971
        }
972
973
        if (\is_object($class)) {
974
            $classTmp = $class;
975
        } elseif ($class && $params) {
976
            $reflectorTmp = new \ReflectionClass($class);
977
            $classTmp = $reflectorTmp->newInstanceArgs($params);
978
        } else {
979
            $classTmp = new $class();
980
        }
981
982
        if ($class === \stdClass::class) {
983
            $propertyAccessor = null;
984
        } else {
985
            $propertyAccessor = \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor();
986
        }
987
988
        foreach ($row as $key => &$value) {
989
            if ($class === \stdClass::class) {
990
                $classTmp->{$key} = $value;
991
            } else {
992
                \assert($propertyAccessor instanceof \Symfony\Component\PropertyAccess\PropertyAccessor);
993
                $propertyAccessor->setValue($classTmp, $key, $value);
994
            }
995
        }
996
997
        return $classTmp;
998
    }
999
1000
    /**
1001
     * Returns all rows at once as key-value pairs.
@@ 1092-1139 (lines=48) @@
1089
     * @psalm-param class-string|object|null $class
1090
     * @psalm-param array<int, mixed>|null $params
1091
     */
1092
    public function fetchYield(
1093
        $class = null,
1094
        array $params = null,
1095
        bool $reset = false
1096
    ): \Generator {
1097
        if ($reset) {
1098
            $this->reset();
1099
        }
1100
1101
        // fallback
1102
        if (!$class || $class === 'stdClass') {
1103
            $class = \stdClass::class;
1104
        }
1105
1106
        if (\is_object($class)) {
1107
            $classTmp = $class;
1108
        } elseif ($class && $params) {
1109
            $reflectorTmp = new \ReflectionClass($class);
1110
            $classTmp = $reflectorTmp->newInstanceArgs($params);
1111
        } else {
1112
            $classTmp = new $class();
1113
        }
1114
1115
        $row = $this->fetch_assoc();
1116
        $row = $row ? $this->cast($row) : false;
1117
1118
        if (!$row) {
1119
            return;
1120
        }
1121
1122
        if ($class === \stdClass::class) {
1123
            $propertyAccessor = null;
1124
        } else {
1125
            $propertyAccessor = \Symfony\Component\PropertyAccess\PropertyAccess::createPropertyAccessor();
1126
        }
1127
1128
        /** @noinspection AlterInForeachInspection */
1129
        foreach ($row as $key => &$value) {
1130
            if ($class === \stdClass::class) {
1131
                $classTmp->{$key} = $value;
1132
            } else {
1133
                \assert($propertyAccessor instanceof \Symfony\Component\PropertyAccess\PropertyAccessor);
1134
                $propertyAccessor->setValue($classTmp, $key, $value);
1135
            }
1136
        }
1137
1138
        yield $classTmp;
1139
    }
1140
1141
    /**
1142
     * @return mixed|null