回答編集履歴

8 修正

退会済みユーザー

退会済みユーザー

2016/06/10 04:25  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
} else {
   // 成功時にページ遷移
   header('Location: success.php');
   if (!is_null(filter_input_array(INPUT_POST))) {
       header('Location: success.php');
   }
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
もし、意図しないバグがあっても、Validate クラスの内部をチェックすれば良いことになるため、プログラムの保守性も上がるはずです。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
# ⑤を検証するためのサンプルコード
以下のようなコードを実際に書いて、検証してみましょう。
```php
<?php
class Test
{
   /**
    * private プロパティ
    */
   private $private = 'private';
   /**
    * protected プロパティ
    */
   protected $protected = 'protected';
   /**
    * public プロパティ
    */
   public $public = 'public';
   /**
    * private_method
    */
   private function private_method()
   {
       // この変数にアクセスできるのは、private_method()の中からだけ
       // protected_method, public_method からはアクセスできない
       $private_var = 'private_var';
       // プロパティにアクセス
       $this->private = 'private_method で書き換えました';
       $this->protected = 'private_method で書き換えました';
       $this->public = 'private_method で書き換えました';
       return array(
           'private_var' => $private_var
           , 'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * protected_method
    */
   protected function protected_method()
   {
       // プロパティにアクセス
       $this->private = 'protected_method で書き換えました';
       $this->protected = 'protected_method で書き換えました';
       $this->public = 'protected_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * public_method
    */
   public function public_method()
   {
       // プロパティにアクセス
       $this->private = 'public_method で書き換えました';
       $this->protected = 'public_method で書き換えました';
       $this->public = 'public_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
}
```
7 追記

退会済みユーザー

退会済みユーザー

2016/06/10 02:37  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
} else {  
   // 成功時にページ遷移  
   header('Location: success.php');  
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
もし、意図しないバグがあっても、Validate クラスの内部をチェックすれば良いことになるため、プログラムの保守性も上がるはずです。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
# ⑤を検証するためのサンプルコード
以下のようなコードを実際に書いて、検証してみましょう。
```php
<?php
class Test
{
   /**
    * private プロパティ
    */
   private $private = 'private';
   /**
    * protected プロパティ
    */
   protected $protected = 'protected';
   /**
    * public プロパティ
    */
   public $public = 'public';
   /**
    * private_method
    */
   private function private_method()
   {
       // この変数にアクセスできるのは、private_method()の中からだけ
       // protected_method, public_method からはアクセスできない
       $private_var = 'private_var';
       // プロパティにアクセス
       $this->private = 'private_method で書き換えました';
       $this->protected = 'private_method で書き換えました';
       $this->public = 'private_method で書き換えました';
       return array(
           'private_var' => $private_var
           , 'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * protected_method
    */
   protected function protected_method()
   {
       // プロパティにアクセス
       $this->private = 'protected_method で書き換えました';
       $this->protected = 'protected_method で書き換えました';
       $this->public = 'protected_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * public_method
    */
   public function public_method()
   {
       // プロパティにアクセス
       $this->private = 'public_method で書き換えました';
       $this->protected = 'public_method で書き換えました';
       $this->public = 'public_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
}
```
6 修正

退会済みユーザー

退会済みユーザー

2016/06/10 01:43  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
もし、意図しないバグがあっても、Validate クラスの内部をチェックすれば良いことになるため、プログラムの保守性も上がるはずです。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
# ⑤を検証するためのサンプルコード
以下のようなコードを実際に書いて、検証してみましょう。
```php
<?php
/**  
* Test.php  
*  
* @author Kosuke Shibuya <kosuke@jlamp.net>  
* @since 2016/06/10  
*/  
class Test
{
   /**
    * private プロパティ
    */
   private $private = 'private';
   /**
    * protected プロパティ
    */
   protected $protected = 'protected';
   /**
    * public プロパティ
    */
   public $public = 'public';
   /**
    * private_method
    */
   private function private_method()
   {
       // この変数にアクセスできるのは、private_method()の中からだけ
       // protected_method, public_method からはアクセスできない
       $private_var = 'private_var';
       // プロパティにアクセス
       $this->private = 'private_method で書き換えました';
       $this->protected = 'private_method で書き換えました';
       $this->public = 'private_method で書き換えました';
       return array(
           'private_var' => $private_var
           , 'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * protected_method
    */
   protected function protected_method()
   {
       // プロパティにアクセス
       $this->private = 'protected_method で書き換えました';
       $this->protected = 'protected_method で書き換えました';
       $this->public = 'protected_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * public_method
    */
   public function public_method()
   {
       // プロパティにアクセス
       $this->private = 'public_method で書き換えました';
       $this->protected = 'public_method で書き換えました';
       $this->public = 'public_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
}
```
5 追記

退会済みユーザー

退会済みユーザー

2016/06/10 01:23  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
もし、意図しないバグがあっても、Validate クラスの内部をチェックすれば良いことになるため、プログラムの保守性も上がるはずです。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
# ⑤を検証するためのサンプルコード
以下のようなコードを実際に書いて、検証してみましょう。
```php
<?php
/**
* Test.php
*
* @author Kosuke Shibuya <kosuke@jlamp.net>
* @since 2016/06/10
*/
class Test
{
   /**
    * private プロパティ
    */
   private $private = 'private';
   /**
    * protected プロパティ
    */
   protected $protected = 'protected';
   /**
    * public プロパティ
    */
   public $public = 'public';
   /**
    * private_method
    */
   private function private_method()
   {
       // この変数にアクセスできるのは、private_method()の中からだけ
       // protected_method, public_method からはアクセスできない
       $private_var = 'private_var';
       // プロパティにアクセス
       $this->private = 'private_method で書き換えました';
       $this->protected = 'private_method で書き換えました';
       $this->public = 'private_method で書き換えました';
       return array(
           'private_var' => $private_var
           , 'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * protected_method
    */
   protected function protected_method()
   {
       // プロパティにアクセス
       $this->private = 'protected_method で書き換えました';
       $this->protected = 'protected_method で書き換えました';
       $this->public = 'protected_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
   /**
    * public_method
    */
   public function public_method()
   {
       // プロパティにアクセス
       $this->private = 'public_method で書き換えました';
       $this->protected = 'public_method で書き換えました';
       $this->public = 'public_method で書き換えました';
       return array(
           'private' => $this->private
           , 'protected' => $this->protected
           , 'public' => $this->public
       );
   }
}
```
4 修正

退会済みユーザー

退会済みユーザー

2016/06/10 01:06  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
もし、意図しないバグがあっても、Validate クラスの内部をチェックすれば良いことになるため、プログラムの保守性も上がるはずです。  
 
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
3 追記

退会済みユーザー

退会済みユーザー

2016/06/10 00:57  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```
```html
<?php
function h($str)
{
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');
}
class Validate
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   public function required()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if (empty($email)) {
           $this->error[] = 'E-mail は入力必須です。';
       }
       if (empty($email_conf)) {
           $this->error[] = 'E-mail(確認用) は入力必須です。';
       }
       return $this;
   }
   /**
    * メールアドレスの確認用との一致
    * @return \Validate
    */
   public function isEqual()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
       }
       return $this;
   }
   /**
    * 登録済みかどうか
    * @return \Validate
    */
   public function isRegisterd()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return $this;
       }
       $email = filter_input(INPUT_POST, 'email');
       // DB への問い合わせ
       //
       // この辺の処理は自分で書いてね
       //
       if (false) {
           $this->error[] = '既に登録済みです。';
       }
       return $this;
   }
   /**
    * バリデート結果
    * @return boolean
    */
   public function check()
   {
       if (count($this->error)) {
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objValidate = new Validate();
$objValidate->required()
   ->isEqual()
   ->isRegisterd();
if (!$objValidate->check()) {
   $errMsg = $objValidate->getErrorMessage();
}
?><!DOCTYPE HTML>
<html lang="ja">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               foreach ($errMsg as $msg) {
                   printf('<p>%s</p>', $msg);
               }
           }
           ?>
       </form>
   </body>
</html>
```
```
#コメントへの回答
① $error[] とすると、function required() { } の中からだけがその変数へアクセスできるため、外からアクセスできません。なので他のメソッドからもアクセスできるクラスのプロパティに値を守らせることが目的です。
②この処理がないと、POSTされていない時も、そのあとの処理が実行されてしまいます。POSTしていない時は処理する必要がないので、処理を止めるために記述しています。
③他のメソッドの結果を利用せず、単独のメソッドだけで処理することが可能なら static で定義すればいいでしょう。 Validate クラスで 提示した例では、3つのチェックを行っています。それぞれ同時にチェックして、一度にエラーメッセージを出力するために、インスタンスを同一のものに保障しなければなりませんので、new して使う方法にしました。
static で実装する方法もありますが、シングルトンパターンの利用してインスタンスの同一性を担保することというアプローチが必要になります。失礼ながら質問者様にはまだ早計かと思い、このパターンでの実装は見送りました。
> でも今試しに、private $error = array();を消して試してみたら
> 'メールアドレスが一致しません。がしっかり表示されています。
確かに省略した場合でも、表示はされますね。
ただし、その場合、$this->error は public となり、private 変数にはなりません。
privateで定義する意味は、あくまで $this->error の値を書き換えることができるのは、そのクラスの中からのみ可能とするためです。そうすることでアプリケーションの保守性やバグの注入を防ぐ意味があります。
public にしてしまうと、クラスの外から値を書き換えることが可能になってしまいます。
2 追記

退会済みユーザー

退会済みユーザー

2016/06/10 00:01  投稿

とりあえず元のイメージを維持した形で書きました。
通常なら、Validate クラスでまとめるほうが無難だと思います。
```php
```html
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```  
```html  
<?php  
 
function h($str)  
{  
   return htmlspecialchars($str, ENT_QUOTES, 'utf-8');  
}  
 
class Validate  
{  
 
   /**  
    * エラーメッセージ  
    * 複数のエラーメッセージを格納できるように配列に  
    *  
    * @var array  
    */  
   private $error = array();  
 
   public function required()  
   {  
       if (is_null(filter_input_array(INPUT_POST))) {  
           return $this;  
       }  
       $email = filter_input(INPUT_POST, 'email');  
       $email_conf = filter_input(INPUT_POST, 'email_conf');  
 
       if (empty($email)) {  
           $this->error[] = 'E-mail は入力必須です。';  
       }  
       if (empty($email_conf)) {  
           $this->error[] = 'E-mail(確認用) は入力必須です。';  
       }  
       return $this;  
   }  
 
   /**  
    * メールアドレスの確認用との一致  
    * @return \Validate  
    */  
   public function isEqual()  
   {  
       if (is_null(filter_input_array(INPUT_POST))) {  
           return $this;  
       }  
       $email = filter_input(INPUT_POST, 'email');  
       $email_conf = filter_input(INPUT_POST, 'email_conf');  
 
       if ($email !== $email_conf) {  
           $this->error[] = 'メールアドレスが一致しません。';  
       }  
       return $this;  
   }  
 
   /**  
    * 登録済みかどうか  
    * @return \Validate  
    */  
   public function isRegisterd()  
   {  
       if (is_null(filter_input_array(INPUT_POST))) {  
           return $this;  
       }  
 
       $email = filter_input(INPUT_POST, 'email');  
 
       // DB への問い合わせ  
       //  
       // この辺の処理は自分で書いてね  
       //  
       if (false) {  
           $this->error[] = '既に登録済みです。';  
       }  
       return $this;  
   }  
 
   /**  
    * バリデート結果  
    * @return boolean  
    */  
   public function check()  
   {  
       if (count($this->error)) {  
           return false;  
       }  
       return true;  
   }  
 
   /**  
    * エラーメッセージを取得する  
    * @return array  
    */  
   public function getErrorMessage()  
   {  
       return $this->error;  
   }  
 
}  
 
$objValidate = new Validate();  
$objValidate->required()  
   ->isEqual()  
   ->isRegisterd();  
if (!$objValidate->check()) {  
   $errMsg = $objValidate->getErrorMessage();  
}  
?><!DOCTYPE HTML>  
<html lang="ja">  
   <head>  
       <meta charset="UTF-8">  
       <title></title>  
   </head>  
   <body>  
       <form action="" method="post">  
           <table>  
               <tr>  
                   <td>E-mail</td>  
                   <td><input type="post" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" /></td>  
               </tr>  
               <tr>  
                   <td>E-mail (確認用)</td>  
                   <td><input type="post" name="email_conf" value="<?php echo h(filter_input(INPUT_POST, 'email_conf')); ?>" /></td>  
               </tr>  
               <tr>  
                   <td></td>  
                   <td><button>送信</button></td>  
               </tr>  
           </table>  
           <?php  
           if (isset($errMsg)) {  
               foreach ($errMsg as $msg) {  
                   printf('<p>%s</p>', $msg);  
               }  
           }  
           ?>  
       </form>  
   </body>  
</html>  
```
1 追記

退会済みユーザー

退会済みユーザー

2016/06/09 23:30  投稿

とりあえず元のイメージを維持した形で書きました。  
通常なら、Validate クラスでまとめるほうが無難だと思います。  
 
```php
<?php
class Email
{
   /**
    * エラーメッセージ
    * 複数のエラーメッセージを格納できるように配列に
    *
    * @var array
    */
   private $error = array();
   /**
    * メールアドレスの入力チェック
    * @return bool
    */
   public function check()
   {
       if (is_null(filter_input_array(INPUT_POST))) {
           return true;
       }
       $email = filter_input(INPUT_POST, 'email');
       $email_conf = filter_input(INPUT_POST, 'email_conf');
       if ($email !== $email_conf) {
           $this->error[] = 'メールアドレスが一致しません。';
           return false;
       }
       return true;
   }
   /**
    * エラーメッセージを取得する
    * @return array
    */
   public function getErrorMessage()
   {
       return $this->error;
   }
}
$objEmail = new Email();
if (!$objEmail->check()) {
   $errMsg = implode(',', $objEmail->getErrorMessage());
}
?><!DOCTYPE HTML>
<html lang="">
   <head>
       <meta charset="UTF-8">
       <title></title>
   </head>
   <body>
       <form action="" method="post">
           <table>
               <tr>
                   <td>E-mail</td>
                   <td><input type="post" name="email" /></td>
               </tr>
               <tr>
                   <td>E-mail (確認用)</td>
                   <td><input type="post" name="email_conf" /></td>
               </tr>
               <tr>
                   <td></td>
                   <td><button>送信</button></td>
               </tr>
           </table>
           <?php
           if (isset($errMsg)) {
               printf('<p>%s</p>', $errMsg);
           }
           ?>
       </form>
   </body>
</html>
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る