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