Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索PHP(クラス)⇒Q&A


大項目:「 PHP 」 - 中項目:「 クラス 」

「 PHPでクラスを使う場合の簡単なサンプル 」

PHPでクラスを使う場合の簡単なサンプルを掲示してください


回答

クラスを使うサンプルは以下

ソース

静的クラス(インスタンスを作らなくても使える)
class foo{
  public static $val=10;
  public static $fruits=['apple','orange'];
  const DEF='Define'; //定数
  public static function samurai($val){
    $val ='Samurai '.$val;
    return $val;
  }
  public static function val_add($val){
    self::$val += $val;
    return self::$val;
  }
}
echo foo::$val;
echo foo::val_add(10);
echo foo::$fruits[0];
echo foo::samurai('iei');
echo foo::DEF;
 



動的クラス(インスタンスを作らないと使えない)
class hoo{
  public $val=10;
  public $fruits=['apple','orange'];
  public $fruit_val=['apple'=>'100','orange'=>'50'];
  const DEF='Define'; //定数
  private $sam='Samurai';
  public function samurai($val){
    $val =$this->sam.' '.$val;
    return $val;
  }
}
$hoo=new hoo;
echo $hoo->val;
echo $hoo->fruits[0];
foreach($hoo->fruit_val as $key=>$val){echo $key."=>".$val."<br>";}
echo $hoo->samurai('iei');
echo $hoo::DEF;  //クラス外から定数を参照できるのはPHP5.3.0以降
 


動的クラスの継承
class base_class{  //親クラス
  public $val;
  public function __construct(){  //コンストラクタ(インスタンス作成時に実行される)
    $this->val=2;
  }
}
class ex_class extends base_class{  //base_classを継承した子クラス
  public function get_val(){
    return $this->val;
  }
  public function set_val($val){
    $this->val=$val;
  }
}
 
$ex_class=new ex_class;
echo $ex_class->get_val();
$ex_class->set_val(7);
echo $ex_class->get_val();
 



抽象クラス(PHPで使うことはあまりない)
abstract class AbstractClass{  //親抽象クラス
    abstract protected function getValue();            //宣言のみ。子クラスで実装してするとインスタンスを作成できる
    abstract protected function prefixValue($prefix);  //宣言のみ。子クラスで実装してするとインスタンスを作成できる
    // Common method
    public function printOut() {                       //実装①
        print $this->getValue()."¥n";
    }
}
class MyClass1 extends AbstractClass{  //子クラス1
  protected function getValue(){return "MyClass1";}                   //実装
  public function prefixValue($prefix){return $prefix."MyClass1¥n";}  //実装②
}
class MyClass2 extends AbstractClass{  //子クラス2
  protected function getValue(){return "MyClass2";}                   //実装
  public function prefixValue($prefix){return $prefix."MyClass2¥n";}  //実装③
}
$c1=new MyClass1;
$c1->printOut();                //①
echo $c1->prefixValue("FOO_");  //②
$c2=new MyClass2;
$c2->printOut();                //①
echo $c2->prefixValue("FOO_");  //③
 


余談
一般的なプログラミング言語においては、クラスを使うと処理速度が速くなるが、PHPでは逆に少し遅くなる仕様らしいです(WEBシステムはオブジェクト指向を使うとメモリ消費も大きくなることが多い[使用しないメンバなども生成やメモリ確保するため])。
WEBシステムではリクエスト⇒インスタンス作成⇒処理⇒インスタンス破棄⇒レスポンスとなり、ネイティブプログラミングと違いインスタンスがすぐに破棄されるので、オブジェクト指向を使うメリットがかなり少ないのも残念。
更にWEBシステムでは1つのクラスから複数のインスタンスを作成することが殆ど無いため、静的クラスでも十分だったりします。
Windowsアプリケーション等のネイティブプログラムでは、例えば1つのボタンのクラスから複数のボタンのインスタンスを作成するし、ボタン等のビジュアルなオブジェクトが破棄されるタイミングはウィンドウが破棄(アプリケーションが終了)されるタイミングだったりします。

Mam's WebSite