PDO fetchObject

  1. <?php
  2.  
  3. $dbHost = 'localhost';
  4. $dbUser = 'root';
  5. $dbPass = '';
  6. $dbName = 'fetchobject';
  7.  
  8. $pdo = new PDO('mysql:host=' . $dbHost . ';dbname=' . $dbName, $dbUser, $dbPass,
  9.                 [
  10.                     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  11.                     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
  12.                     PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
  13.                     PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,
  14.                 ]
  15.             );        
  16.  
  17. trait Magic
  18. {
  19.     private $data = [];
  20.  
  21.     public function __set(string $name, $value)
  22.     {
  23.         $this->data[$name] = $value;
  24.     }
  25.  
  26.     public function __get($name)
  27.     {
  28.         return $this->data[$name] ? $this->data[$name] : null;
  29.     }
  30.  
  31.     public function __isset($name)
  32.     {
  33.         return isset($this->data[$name]);
  34.     }
  35.  
  36.     public function __unset($name)
  37.     {
  38.         unset($this->data[$name]);
  39.     }
  40.  
  41.     public function __call($name, $arguments)
  42.     {
  43.         $action = substr($name, 0, 3);
  44.         $property = strtolower(substr($name, 3));
  45.         switch ($action) {
  46.             case 'get':
  47.                 return $this->$property;
  48.                 break;
  49.  
  50.             case 'set':
  51.                 $this->$property = $arguments[0];
  52.                 break;
  53.  
  54.             default :
  55.                 return false;
  56.         }
  57.     }
  58. }
  59.  
  60. class User
  61. {
  62.     use Magic;
  63.  
  64.     public function FIO()
  65.     {
  66.         return $this->name . ' ' . substr(ucfirst($this->subname), 0, 1);
  67.     }
  68. }
  69.  
  70.  
  71.  
  72. $sql = "SELECT * FROM `users`";
  73.  
  74. $users = $pdo->query($sql);
  75.  
  76. while($user = $users->fetchObject('User')) {
  77.     #echo '<pre>' . print_r($user, 1) . '</pre>';
  78.    echo $user->FIO() . '<br>';
  79.     echo $user->name . '<br>';
  80.     echo $user->getAge() . '<br>';
  81. }
Пример
бд
  1. -- phpMyAdmin SQL Dump
  2. -- version 4.6.5.2
  3. -- https://www.phpmyadmin.net/
  4. --
  5. -- Хост: 127.0.0.1:3306
  6. -- Время создания: Июл 16 2017 г., 19:17
  7. -- Версия сервера: 10.1.19-MariaDB
  8. -- Версия PHP: 7.1.0
  9.  
  10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  11. SET time_zone = "+00:00";
  12.  
  13.  
  14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  17. /*!40101 SET NAMES utf8mb4 */;
  18.  
  19. --
  20. -- База данных: `fetchobject`
  21. --
  22.  
  23. -- --------------------------------------------------------
  24.  
  25. --
  26. -- Структура таблицы `users`
  27. --
  28.  
  29. CREATE TABLE `users` (
  30.   `id` int(11) NOT NULL,
  31.   `name` varchar(255) DEFAULT NULL,
  32.   `subname` varchar(255) DEFAULT NULL,
  33.   `age` int(2) DEFAULT NULL,
  34.   `sex` enum('male','famale') NOT NULL DEFAULT 'male',
  35.   `site` varchar(255) DEFAULT NULL
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  37.  
  38. --
  39. -- Дамп данных таблицы `users`
  40. --
  41.  
  42. INSERT INTO `users` (`id`, `name`, `subname`, `age`, `sex`, `site`) VALUES
  43. (1, 'Vasya', 'Vasin', 32, 'male', 'http://test.com'),
  44. (2, 'Nikolay', 'Nikolayev', 33, 'male', 'http://testus.ru');
  45.  
  46. --
  47. -- Индексы сохранённых таблиц
  48. --
  49.  
  50. --
  51. -- Индексы таблицы `users`
  52. --
  53. ALTER TABLE `users`
  54.   ADD PRIMARY KEY (`id`);
  55.  
  56. --
  57. -- AUTO_INCREMENT для сохранённых таблиц
  58. --
  59.  
  60. --
  61. -- AUTO_INCREMENT для таблицы `users`
  62. --
  63. ALTER TABLE `users`
  64.   MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
  65. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  66. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  67. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Мы в соцсетях

vk tw tg yt

Пожертвования

Аноним2850 р.
Freddy1700 р.
riseremi1611 р.
NaruTrey800 р.
vlavolk637 р.