将来のリリースで壊れますか?
はい、古い(現在)非推奨のmysql_*
機能を使用しているためです。
クラスのコード スニペットlnemail_fetch
この名前lnemail
はクラスの名前としてはあまり適切ではありません。見たときにln
意味がわからないからです。また、クラス名は多くUpperCamelCased
の場合メソッドcamelCased
です。
実際にコードを見てみましょう:
クラスを見ると、それは単なるクラスであり、現在 OOP とは何の関係もありません。私がしたことは、$result
プロパティを非公開にすることでした。現在、あなたは単にデータのコンテナであるためです。また、データベース(またはあなたが持っているストレージ)からのデータへのアクセスを担当する別のクラスを紹介します。また、1 つのメールを表す別のクラスと、これらのメール オブジェクトを構築するファクトリ クラスを紹介します。これは次のようになります。
// inbox が正しい名前かどうかはわかりません。クラスが何を表しているのかよくわからないからです
class Inbox
{
private $storage;
private $mailFactory;
public function __construct($storage, $mailFactory)
{
$this->storage = $storage;
$this->mailFactory = $mailFactory;
}
public function fetchAllMails()
{
$mailRecordset = $this->storage->fetchAll();
$mails = array();
foreach ($mailRecordset as $mailRecord) {
$mails[] = $this->mailFactory->create($mailRecord);
}
return $mails;
}
}
class InboxStorage
{
private $dbConnection;
public function __construct(\PDO $dbConnection)
{
$this->dbConnection = $dbConnection;
}
public function fetchAll()
{
$stmt = $this->dbConnection->query('SELECT * FROM lnemail');
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
}
class Email
{
private $email;
private $date;
private $week;
public function __construct($email, $date, $week)
{
$this->email = $email;
$this->date = $date;
$this->week = $week;
}
public function getEmail()
{
return $this->email;
}
public function getDate()
{
return $this->date;
}
public function getWeek()
{
return $this->week;
}
}
class EmailFactory
{
public function create($record)
{
return new Email($record['email'], $record['date'], $record['week']);
}
}
そして、次のように実行できます。
// initialize all the objects we are going to need
$emailFactory = new EmailFactory();
$dbConnection = new \PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$inboxStorage = new InboxStorage($dbConnection);
$inbox = new Inbox($inboxStorage, $mailFactory);
// run the code
foreach($inbox->fetchAllMails() as $email) {
echo $mail->email . ' | ' . $mail->date . ' | ' . $mail->week . '<br>';
}