Code Duplication    Length = 48-50 lines in 2 locations

src/voku/db/Result.php 2 locations

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