8月 302011
 

phpはインターフェースも使用できます。
インターフェースはクラスに実装しなければ使用できません。
インターフェースDatainterfaceを抽象クラスUserへ実装し、
抽象クラスUserの中でメソッドadd、getを具体的に記述します。
また、抽象クラス内のメソッドprint_hello()は、
継承したサブクラスMemberのなかでオーバーライドして具体的に記述します。

<?php
interface Datainterface
{
 public function add($key,$data);
 public function get($key);
}

abstract class User implements Datainterface {
 private $array = array();
 abstract protected function print_hello();
 
 public function add($key,$data){
  $this->array[$key] = $data;
 }
 
 public function get($key){
  return $this->array[$key] ;
 }
}

class Member extends User{
 public function print_hello(){
  print “会員:ログイン中<br />”;
  print $this->get(“name”) ;
  print “さん、こんにちは!<br />”;
 }
}

$member = new Member();
$member->add(‘name’,”ユーザー”);
$member->print_hello();

?>

8月 282011
 

特定の回数だけ同じことを繰り返したいときは、for文を使います。
都道府県名を配列に入れておき、配列要素の回数だけ
セレクトボックスに出力してみましょう。

<?php
$PrefactureList = array(“北海道”,”青森県”,”岩手県”,”宮城県”,”秋田県”,”山形県”,
“福島県”,”茨城県”,”栃木県”,”群馬県”,”埼玉県”,”千葉県”,”東京都”,”神奈川県”,
“新潟県”,”富山県”,”石川県”,”福井県”,”山梨県”,”長野県”,”岐阜県”,”静岡県”,
“愛知県”,”三重県”,”滋賀県”,”京都府”,”大阪府”,”兵庫県”,”奈良県”,”和歌山県”,
“鳥取県”,”島根県”,”岡山県”,”広島県”,”山口県”,”徳島県”,”香川県”,”愛媛県”,
“高知県”,”福岡県”,”佐賀県”,”長崎県”,”熊本県”,”大分県”,”宮崎県”,”鹿児島県”,”沖縄県”);

$html = “<select name=\”prefecture\”>\n”;
for ($i = 0;$i <=count($PrefactureList)-1;$i++)
{
 $html.=”<option value=\”$i\”>$PrefactureList[$i]</option>\n”;
}
$html.=”</select>\n”;
print $html;
?>

8月 262011
 

php5から抽象クラスというものが追加されました。
abstractをつけてクラス定義しますが、
抽象クラスではメソッドの具体的処理は記述できません。
必ず継承したサブクラスの中でオーバーライドして処理を記述する約束です。
抽象クラスUserのメソッドprint_hello()には何も記載せず、
継承したクラスGuestでオーバーライドしてprint_hello()を記述します。
クラスGuestを使用する場合には、
必ずnew演算子でインスタンスを生成して使用します。

<?php
abstract class User {
 protected $name = NULL;
 abstract protected function print_hello();
}
class Guest extends User{
 protected $name = “ゲスト”;
 public function print_hello(){
 print $this->name;
 print “さん。はじめまして。”;
 }
}

$newuser = new Guest();
$newuser->print_hello();

?>

8月 242011
 

投稿済みの新着ニュースをすべて表示させるとき、
投稿されたコメントをすべて表示させるとき、
特定の条件が成立する間、同じことを何度も繰り返したいことがあります。
phpではwhile文を使います。

<?php
if($dirname = opendir(‘.’)){
 while(false != ($filename = readdir($dirname)))
 {
 print $filename;
 print “<br />”;
 }
}
?>

8月 232011
 

今回はオブジェクト指向言語の特徴の中で最も重要なクラスの継承です。
クラスUserを定義しておき、そのクラスUserを継承(インヘリタンス)して
新たなクラスGuestを作成します。
クラスUserの中で定義した関数print_hello()を、
クラスGuestの中で上書き(オーバーライド)し、同じ名前の関数を実行しても
別の実行結果になるように出来ます。
ここで、継承されるクラスUserをスーパークラス
継承したクラスGuestをサブクラスと呼びます。

<?php
$newuser = new Guest();
$newuser->print_hello();

class User {
 private $name = NULL;

 public function print_hello(){
  print $this->name;
  print “さん、こんにちは!”;
 }
}

class Guest extends User {
 private $name = “ゲスト”;

 public function print_hello(){
  print $this->name;
  print “さん、はじめまして!”;
 }
}
?>

8月 212011
 

ユーザーの使用しているブラウザごとにサイトの内容を変えたい。
ケータイ、PC、スマートフォンそれぞれのサイトを作りたい。
ユーザーの会員種別に応じてサイトの内容を変えたい。
ユーザーがサイトを閲覧している地域に応じて言語を変えたい。
特別な日の特別な時間帯だけ特設サイトに変更したい。
そのような条件に応じてサイトを変えたいとき、IF文以外の方法もあります。
switch~case文を使えば並列した条件に応じて結果を変えることが出来ます。

<?php
$type = “Firefox”;

switch($type)
{
 case “IE”:
  print “あなたはIEユーザーです。”;
  break;
 
 case “Firefox”:
  print “あなたはFirefoxユーザーです。”;
  break;
  
 case “Safari”:
  print “あなたはSafariユーザーです。”;
  break;
  
 case “Chrome”:
  print “あなたはChromeユーザーです。”;
  break;
 
 case “Opera”:
  print “あなたはOperaユーザーです。”;
  break;
  
 default:
  print “あなたのブラウザを特定できませんでした。”;
}
?>

8月 202011
 

プログラム言語の分類方法にhがいくつかありますが、
phpはJava、C++、Ruby、Javascript、Actionscriptと同じく、
オブジェクト指向言語に分類されています。
オブジェクト指向言語の特徴の中から、クラスの作成、クラスの継承、
抽象クラスの作成、インターフェースの実装例をまとめます。
クラスの定義の仕方はユーザー定義関数と良く似ていますが、
クラスを使用するにはnew演算子を使ってインスタンスを生成する必要があります。
また、クラス内で定義した関数を使用する場合も、
これまでと少し表記方法が異なるため注意が必要です。

<?php
$newuser = new User();
$newuser->print_hello();

class User {
 public $name = “ユーザー”;

 public function print_hello(){
  print $this->name;
  print “さん、こんにちは!”;
 }
}
?>

クラスの作成

8月 182011
 

ログインIDとパスワードが一致した場合、サイトへアクセスした時間や曜日に応じて、
使っている端末やブラウザに応じて、、、
条件を満たす場合と満たさない場合で結果を分けたい場合がよくあります。
phpでは他のプログラム言語同様、if文で条件分岐できます。

【会員専用ページの例】
<?php
$username = “user”;
$pass = “pass”;

$db_data[“username”] = “user”;
$db_data[“pass”] = “pass”;

if($db_data[“username”] = $username &&
   $db_data[“pass”] = $pass){
 //会員ページ
 print “ログインに成功しました。会員ページです。”;

}else{
 //ログイン失敗のページ
 print “ログインに失敗しました。”;
}

?>

8月 172011
 

前回はフォームから画像を受け取り、WEBサーバーへ保存し、ページに表示させました。
phpの組み込み関数を使って、受け取ったファイルを操作して、
サムネール画像を作ってみましょう。

【form.html】
ファイルアップロードのテスト
<form action=”view.php” method=”postenctype=”multipart/form-data” name=”form1″ id=”form1″>
  <input name=”MAX_FILE_SIZE” type=”hidden” id=”MAX_FILE_SIZE” value=”100000″ />
画像:
<input name=”uploadfile” type=”file” id=”uploadfile” size=”50″ />
<br />
説明:
<input name=”comment” type=”text” id=”comment” size=”50″ />
<br />
<input type=”submit” name=”button” id=”button” value=”ファイルアップロード” />
</form>

【view.php】
<?php
$resizeX = 150;  //縮小するサイズを指定する
$thumnail_name = “thumnail.jpg”;  //縮小するファイル名を指定する

$file_dir = ‘file/';
$file_path = $file_dir.$_FILES[“uploadfile”][“name”];

if(move_uploaded_file($_FILES[“uploadfile”][“tmp_name”],$file_path)){
 $img_dir = “file/”;
 $img_path = $img_dir.$_FILES[“uploadfile”][“name”];
 $thumnail_path = $img_dir.$thumnail_name;
 if(mb_strpos($_FILES[‘uploadfile’][‘type’],’jpeg’)){
  $gdimg_in = imagecreatefromjpeg($file_path);  //ファイルのイメージIDを取得する
  $ix = imagesx($gdimg_in);  //画像ファイルの横幅を取得する
  $iy = imagesy($gdimg_in);  //画像ファイルの高さを取得する
  
  $ox = $resizeX;        //サイズ変更後の横幅
  $oy = ($ox*$iy)/$ix;  //サイズ変更後の高さを計算する

  $gdimg_out = imagecreatetruecolor($ox,$oy);  //サイズ変更後のイメージIDを作る
  imagecopyresized($gdimg_out,$gdimg_in,0,0,0,0,$ox,$oy,$ix,$iy);  //画像の複製とサイズ変更を行う
  imagejpeg($gdimg_out,$thumnail_path);  //画像をファイルに保存する
  imagedestroy($gdimg_out);  //メモリを解放する
  imagedestroy($gdimg_in);    //メモリを解放する
  
  $size = getimagesize($file_path);
  $size2 = getimagesize($thumnail_path);

?>
ファイルアップロードを完了しました。<br />
<img src=”<?php echo $img_path?>” <?php echo $size[3]?>>
<img src=”<?php echo $thumnail_path?>” <?php echo $size2[3]?>><br />
<?php echo $_POST[“comment”] ?>

<?php
 }else{
 print “JPEG形式の画像をアップロードしてください<br />”;
 }

}else{
 print “正常にアップロード処理されませんでした。”;
}
?>

画像ファイルの加工

8月 142011
 

二つの条件を満たす場合、どちらか片方だけでも満たす場合、
もっと複雑な条件を満たす場合のみ、動作を分けなければならないことがあります。
phpでは他のプログラム言語同様の論理演算子を使えます。

論理積 ⇒ $a && $b
論理和 ⇒ $a || $b
論理積 ⇒ $a and $b
論理和 ⇒ $a or $b
排他的論理和 ⇒ $a xor $b
否定 ⇒ !$a