| @@ 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 |
|