| @@ 838-882 (lines=45) @@ | ||
| 835 | * |
|
| 836 | * @return object|false <p><strong>false</strong> on error</p> |
|
| 837 | */ |
|
| 838 | public function fetchObject($class = '', array $params = null, bool $reset = false) |
|
| 839 | { |
|
| 840 | if ($reset === true) { |
|
| 841 | $this->reset(); |
|
| 842 | } |
|
| 843 | ||
| 844 | // fallback |
|
| 845 | if (!$class || $class === 'stdClass') { |
|
| 846 | /** @noinspection ClassConstantCanBeUsedInspection */ |
|
| 847 | $class = '\stdClass'; |
|
| 848 | } |
|
| 849 | ||
| 850 | $row = $this->fetch_assoc(); |
|
| 851 | $row = $row ? $this->cast($row) : false; |
|
| 852 | ||
| 853 | if (!$row) { |
|
| 854 | return false; |
|
| 855 | } |
|
| 856 | ||
| 857 | if (\is_object($class)) { |
|
| 858 | ||
| 859 | $classTmp = $class; |
|
| 860 | ||
| 861 | } elseif ($class && $params) { |
|
| 862 | ||
| 863 | $reflectorTmp = new \ReflectionClass($class); |
|
| 864 | $classTmp = $reflectorTmp->newInstanceArgs($params); |
|
| 865 | ||
| 866 | } else { |
|
| 867 | ||
| 868 | $classTmp = new $class; |
|
| 869 | ||
| 870 | } |
|
| 871 | ||
| 872 | $propertyAccessor = PropertyAccess::createPropertyAccessor(); |
|
| 873 | foreach ($row as $key => $value) { |
|
| 874 | if ($class === '\stdClass') { |
|
| 875 | $classTmp->{$key} = $value; |
|
| 876 | } else { |
|
| 877 | $propertyAccessor->setValue($classTmp, $key, $value); |
|
| 878 | } |
|
| 879 | } |
|
| 880 | ||
| 881 | return $classTmp; |
|
| 882 | } |
|
| 883 | ||
| 884 | /** |
|
| 885 | * Returns all rows at once as key-value pairs. |
|
| @@ 972-1016 (lines=45) @@ | ||
| 969 | * |
|
| 970 | * @return \Generator |
|
| 971 | */ |
|
| 972 | public function fetchYield($class = '', array $params = null, bool $reset = false): \Generator |
|
| 973 | { |
|
| 974 | if ($reset === true) { |
|
| 975 | $this->reset(); |
|
| 976 | } |
|
| 977 | ||
| 978 | // fallback |
|
| 979 | if (!$class || $class === 'stdClass') { |
|
| 980 | /** @noinspection ClassConstantCanBeUsedInspection */ |
|
| 981 | $class = '\stdClass'; |
|
| 982 | } |
|
| 983 | ||
| 984 | if (\is_object($class)) { |
|
| 985 | ||
| 986 | $classTmp = $class; |
|
| 987 | ||
| 988 | } elseif ($class && $params) { |
|
| 989 | ||
| 990 | $reflectorTmp = new \ReflectionClass($class); |
|
| 991 | $classTmp = $reflectorTmp->newInstanceArgs($params); |
|
| 992 | ||
| 993 | } else { |
|
| 994 | ||
| 995 | $classTmp = new $class; |
|
| 996 | ||
| 997 | } |
|
| 998 | ||
| 999 | $row = $this->fetch_assoc(); |
|
| 1000 | $row = $row ? $this->cast($row) : false; |
|
| 1001 | ||
| 1002 | if (!$row) { |
|
| 1003 | return; |
|
| 1004 | } |
|
| 1005 | ||
| 1006 | $propertyAccessor = PropertyAccess::createPropertyAccessor(); |
|
| 1007 | foreach ($row as $key => $value) { |
|
| 1008 | if ($class === '\stdClass') { |
|
| 1009 | $classTmp->{$key} = $value; |
|
| 1010 | } else { |
|
| 1011 | $propertyAccessor->setValue($classTmp, $key, $value); |
|
| 1012 | } |
|
| 1013 | } |
|
| 1014 | ||
| 1015 | yield $classTmp; |
|
| 1016 | } |
|
| 1017 | ||
| 1018 | /** |
|
| 1019 | * @return mixed |
|