Code Duplication    Length = 47-49 lines in 2 locations

src/voku/db/Result.php 2 locations

@@ 936-984 (lines=49) @@
933
     * @return false|object
934
     *                      <p><strong>false</strong> on error</p>
935
     */
936
    public function &fetchObject(
937
        $class = '',
938
        array $params = null,
939
        bool $reset = false
940
    ) {
941
        if ($reset) {
942
            $this->reset();
943
        }
944
945
        // fallback
946
        if (!$class || $class === 'stdClass') {
947
            $class = \stdClass::class;
948
        }
949
950
        $row = $this->fetch_assoc();
951
        $row = $row ? $this->cast($row) : false;
952
953
        if (!$row) {
954
            /** @noinspection PhpUnnecessaryLocalVariableInspection */
955
            $dataTmp = false;
956
957
            return $dataTmp;
958
        }
959
960
        if (\is_object($class)) {
961
            $classTmp = $class;
962
        } elseif ($class && $params) {
963
            $reflectorTmp = new \ReflectionClass($class);
964
            $classTmp = $reflectorTmp->newInstanceArgs($params);
965
        } else {
966
            $classTmp = new $class();
967
        }
968
969
        if ($class === \stdClass::class) {
970
            $propertyAccessor = null;
971
        } else {
972
            $propertyAccessor = PropertyAccess::createPropertyAccessor();
973
        }
974
975
        foreach ($row as $key => &$value) {
976
            if ($class === \stdClass::class) {
977
                $classTmp->{$key} = $value;
978
            } else {
979
                $propertyAccessor->setValue($classTmp, $key, $value);
980
            }
981
        }
982
983
        return $classTmp;
984
    }
985
986
    /**
987
     * Returns all rows at once as key-value pairs.
@@ 1075-1121 (lines=47) @@
1072
     *
1073
     * @return \Generator
1074
     */
1075
    public function fetchYield(
1076
        $class = '',
1077
        array $params = null,
1078
        bool $reset = false
1079
    ): \Generator {
1080
        if ($reset) {
1081
            $this->reset();
1082
        }
1083
1084
        // fallback
1085
        if (!$class || $class === 'stdClass') {
1086
            $class = \stdClass::class;
1087
        }
1088
1089
        if (\is_object($class)) {
1090
            $classTmp = $class;
1091
        } elseif ($class && $params) {
1092
            $reflectorTmp = new \ReflectionClass($class);
1093
            $classTmp = $reflectorTmp->newInstanceArgs($params);
1094
        } else {
1095
            $classTmp = new $class();
1096
        }
1097
1098
        $row = $this->fetch_assoc();
1099
        $row = $row ? $this->cast($row) : false;
1100
1101
        if (!$row) {
1102
            return;
1103
        }
1104
1105
        if ($class === \stdClass::class) {
1106
            $propertyAccessor = null;
1107
        } else {
1108
            $propertyAccessor = PropertyAccess::createPropertyAccessor();
1109
        }
1110
1111
        /** @noinspection AlterInForeachInspection */
1112
        foreach ($row as $key => &$value) {
1113
            if ($class === \stdClass::class) {
1114
                $classTmp->{$key} = $value;
1115
            } else {
1116
                $propertyAccessor->setValue($classTmp, $key, $value);
1117
            }
1118
        }
1119
1120
        yield $classTmp;
1121
    }
1122
1123
    /**
1124
     * @return mixed|null