рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЫрд┐рдкрд╛рдирд╛ рд╣реИ, рдореБрдЭреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╕рдВрдж рд╣реИрдВ, рдФрд░ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдФрд░ рдЬрдм рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рди рдХрд┐ рдХрд┐рд╕реА рд╕рд░рдгреА рдХрд╛ред рдФрд░ рди рд╕рд┐рд░реНрдл рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдмрд▓реНрдХрд┐ рдореБрдЭреЗ рдЬрд┐рд╕ рд╕реЗрдЯ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдкрд╣рд▓реЗ, 3 рдЪрд░рдгреЛрдВ рдореЗрдВ рдЖрдзрд╛рд░ рд╕реЗ рдЪрдпрди рд╣реБрдЖ рдерд╛:
1. рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддрд╛ рд╣реИ
2. рдкрд░рд┐рдгрд╛рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛
3. рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓реЗрдВ
рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдВред рдпрд╣ рдЙрддрдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд╛рдпрд╛ - рд╕рдВрдЧреНрд░рд╣ред
рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИред рдореИрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА, рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВред
рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ - рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
Db_users :: getAll () рд╡рд┐рдзрд┐
1. рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ
2. рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрд▓рд╛рдПрдВ
3. рдкреНрд░рд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреВрд╕рд░реЗ рд╕рд░рдгреА рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдЬреЛ рд╣рдо рджреЗрддреЗ рд╣реИрдВ
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ:
static public function getAll() { $result = array(); $data = $this->db->fetchAll(); foreach( $data as $row ) { $user = new User( $row ); $result[] = $user; } return $result; }
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕реА рд╕рд░рд▓ рдФрд░ рдорд╛рдирдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рдФрд░ рдХрд┐рд╕реА рддрд░рд╣, рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
<html> <head> <title>Users list</title> </head> <body> <table> <th> <td>User ID</td> <td>User login</td> <td>User email</td> <td>User name</td> </th> <?php foreach( $users as $user ): ?> <tr> <td><?php echo $user->id; ?></td> <td><?php echo $user->login; ?></td> <td><?php echo $user->email; ?></td> <td><?php echo $user->name; ?></td> </tr> <?php endforeach; ?> </table> </body> </html>
рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ред рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрд▓рдд рд╣реИред рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬ рджреЛ рдЪрдХреНрд░ рд╣реИред рдкрд╣рд▓реА рдЬрдм рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдЬрдм рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреЗ рд╣реИрдВред рджреЛ рдЫреЛрд░реЛрдВ рдкрд░ (рд▓рдЧрднрдЧ рдмреЛрд▓рддреЗ рд╣реБрдП) рдПрдХ рд╣реА рд╕рд░рдгреА - рдХреНрдпреЛрдВ? рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдкреАрдбреАрдУ рд╣реИ!
рд╣рд╛рдБ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдЬрд╛рджреВ рд╣реИред рдпрд╣ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╕рдВрдж рдЖрдПрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ:
class A { public function __construct() { echo "<br>construct"; } public function __set($key, $val) { echo "<br>setter"; } } $pdo = new PDO('mysql:dbname=home;host=127.0.0.1', 'root'); $sql = 'SELECT id FROM `table`'; $res = $pdo->query($sql); var_dump( $res->fetchObject('A') ); : setter setter constructobject(A)
(рдХреГрдкрдпрд╛ рд▓реЛрдЧ рдореБрдЭреЗ PDO :: FETCH_PROPS_LATE рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ, рдЗрд╕рд╕реЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред)
рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рд░реБрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдореИрдВрдиреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдмрдирд╛рдпрд╛, рдореИрдВ рдЦрд╛рд▓реА рдЪрд░ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдмреИрд╕рд╛рдЦреА рдирд╣реАрдВ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛), рдФрд░ рд╕рднреА рдлрд╝реАрд▓реНрдб рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдПрдХ рдорд╣рд╛рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ - рдПрд░рд┐рдпрд░рдЗрдВрдЯрд░реЗрдЯрд░ред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╕реНрддреБ, рдЧреЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рд╕рд░рдгреА рдХреА рддрд░рд╣ рдмрд╕ рдЬрд╛рддреА рд╣реИ рдФрд░ рдлрд╝реЙрд░рдЪ рдореЗрдВ рдУрд╡рд░рд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред рдмрд╕ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред
class Collection extends ArrayIterator { }
GetAll рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓реЗрдВ:
static public function getAll() { $result = array(); $data = $this->db->fetchAll(); $result = new Collection( $data ); return $result; }
рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ:
<?php foreach( $users as $user ): ?> <tr> <td><?php echo $user['id']; ?></td> <td><?php echo $user['login']; ?></td> <td><?php echo $user['email']; ?></td> <td><?php echo $user['name']; ?></td> </tr> <?php endforeach; ?>
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдХреНрдпрд╛ рд╣реИ? рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдХреЙрд░реНрди рдХреЙрдкреА рдХрд┐рдП рд╣реБрдП рдРрд░реЗ рд╣реИрдВред рддреЛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рд╡рд╕реНрддреБ рдФрд░ рдПрдХ рдкреВрд░реНрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╣рдо рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ ArrayIterator :: рдСрдлрд╕реЗрдЯрдЧреЗрдЯ (рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣реБрдВрдЪ) рдФрд░ ArrayIterator :: рд╡рд░реНрддрдорд╛рди (рдЬрдм рдкреНрд░рд╡реЗрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдирд╛ рдФрд░ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛), рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреБрдВрдЬреА рдФрд░ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЛ рдЖрдВрддрд░рд┐рдХ рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддреА рд╣реИрдВ, рдХреНрд░рдорд╢рдГ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рдУрд╡рд░рд░рд╛рдЗрдб:
public function offsetGet( $index ) { if( empty( $this->_cache[$index] ) ) { // $this->_cache[$index] = new User( parent::offsetGet[$index] ); } return $this->_cache[$index]; } public function current( ) { $index = parent::key(); if( empty( $this->_cache[$index] ) ) { // $this->_cache[$index] = new User( parent::current() ); } return $this->_cache[$index]; }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡реИрд╕рд╛ рд╣реА рд╣реЛ рдЧрдпрд╛ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛:
<?php foreach( $users as $user ): ?> <tr> <td><?php echo $user->id; ?></td> <td><?php echo $user->login; ?></td> <td><?php echo $user->email; ?></td> <td><?php echo $user->name; ?></td> </tr> <?php endforeach; ?>
рдЦреИрд░, рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЪрдХреНрд░реЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛, рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛
рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рд▓реМрдЯреЗ рд╣реБрдП рд╡рд░реНрдЧ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред