メソッド定義でブロック評価は yield で行う。ブロックで最後に評価した値がyield には戻り値。yield への引数がブロックパラメータに渡す。ブロックパラメータはブロック冒頭で | で挟んで指定
例
■クラス定義(単にクラスを定義しただけで何の機能も持たないクラス)
▼結果(単にクラスを定義しただけなので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class0.html
■クラス独自の変数である「プロパティ」(フィールド/メンバ変数ともいう)を定義
▼結果(プロパティを定義しただけで、どこからも呼び出していないので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class01.html
■メソッド(クラスにおける関数)を定義
▼結果(出力処理を記述していないので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class02.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP4) - ゲッター・セッター不使用
PHP4で、クラス定義内に、変数(プロパティ)の定義をする際は、変数の前に必ず「var」と記述
▼結果
http://php.w4c.work/0-PROTOTYPE/class1.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP5) - ゲッター・セッター不使用
▼結果
http://php.w4c.work/0-PROTOTYPE/class1_5.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP5) - プロパティへのアクセスにゲッター・セッター利用
▼結果
http://php.w4c.work/0-PROTOTYPE/class1_5_1.html
■インスタンスを使ってメンバ(プロパティ)へアクセス(PHP5) - 一般的な使用例
▼結果
http://php.w4c.work/0-PROTOTYPE/class03.html
class Product{//「class」というキーワードの後ろに好きなクラス名を記述。クラスの開始と終了を表す「{」「}」を記述
}
▼結果(単にクラスを定義しただけなので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class0.html
■クラス独自の変数である「プロパティ」(フィールド/メンバ変数ともいう)を定義
class Product{
private $name; // 商品名。「private修飾子」→外部からのアクセス不可
private $price; // 価格。「private修飾子」→外部からのアクセス不可
}
▼結果(プロパティを定義しただけで、どこからも呼び出していないので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class01.html
■メソッド(クラスにおける関数)を定義
class Product{
private $name; // 商品名
private $price; // 価格
public function getName(){ // ゲッター(商品名を取得)。「public修飾子」→外部からのアクセス可
return $this->name; // 「$this」→クラス内に記述することで、クラス自身を指す。「$this->name」 →「Productクラス自身の$nameプロパティ」の意
}
public function setName($name){ // セッター(商品名を設定)。「public修飾子」→外部からのアクセス可
$this->name = $name; // 「$this」→クラス内に記述することで、クラス自身を指す。「$this->name」 →「Productクラス自身の$nameプロパティ」の意
}
}
▼結果(出力処理を記述していないので、結果には何も表示されない)
http://php.w4c.work/0-PROTOTYPE/class02.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP4) - ゲッター・セッター不使用
PHP4で、クラス定義内に、変数(プロパティ)の定義をする際は、変数の前に必ず「var」と記述
class SIGNAL{//「SIGNAL」という名の「クラス」を定義
var $red = "stop";//メンバ変数(プロパティ)を定義
var $blue = "go";//メンバ変数(プロパティ)を定義
var $yellow = "caution";//メンバ変数(プロパティ)を定義
function check(){//メンバ関数(メソッド)を定義
echo "左右を見て横断歩道を渡りましょう";
}
}
$obj = new SIGNAL();//「new演算子」によって、クラス「SIGNAL」の「インスタンスオブジェクト」を生成し、「変数$obj」へ格納
echo $obj->red;//オブジェクトが持つメンバ変数(プロパティ)を利用
echo "";
$obj->check();//オブジェクトが持つメンバ関数(メソッド)を使用
▼結果
http://php.w4c.work/0-PROTOTYPE/class1.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP5) - ゲッター・セッター不使用
class SIGNAL{
public $red = "stop";//プロパティ(メンバ変数)定義
public $blue = "go";
public $yellow = "caution";
public function check(){//メソッド(メンバ関数)定義
echo "左右を見て横断歩道を渡りましょう";
}
}
$obj = new SIGNAL();
echo $obj->red;
echo "";
$obj->check();
▼結果
http://php.w4c.work/0-PROTOTYPE/class1_5.html
■インスタンスを使ってメンバ(プロパティ・メソッド)へアクセス(PHP5) - プロパティへのアクセスにゲッター・セッター利用
class SIGNAL{
private $red = "stop";
private $blue = "go";
private $yellow = "caution";
public function getRed(){ // ゲッター
return $this->name;
}
public function setRed($name){ // セッター
$this->name = $name;
}
public function check(){
echo "左右を見て横断歩道を渡りましょう";
}
}
$obj = new SIGNAL();
$obj ->setRed("赤は止まれ"); // プロパティ設定を上書き
$signalRed = $obj ->getRed(); // プロパティ設定を取得
var_dump($signalRed);
echo "";
$obj->check();
▼結果
http://php.w4c.work/0-PROTOTYPE/class1_5_1.html
■インスタンスを使ってメンバ(プロパティ)へアクセス(PHP5) - 一般的な使用例
class Product{
private $name; // 商品名
private $price; // 価格
public function getName(){ // ゲッター
return $this->name;
}
public function setName($name){ // セッター
$this->name = $name;
}
}
$product = new Product();
$product ->setName("本"); // 商品名を設定
$productName = $product->getName(); // 商品名を取得
var_dump($productName);
▼結果
http://php.w4c.work/0-PROTOTYPE/class03.html
例
1人だけ5ポイント分戦う。
その後、2人のそれぞれの現在のレベルを確認。
1人はレベル5でもう1人はレベル0、という内容。
つまり、同じクラスをもとに生成された複数のインスタンス同士は全くかかわりがない(個々のインスタンスは完全に独立している)。言い換えると、クラスが同じなので性質は同じだが、各インスタンスが保持しているデータはインスタンス独自のもの(他のインスタンスへは一切影響を与えない=クラスとインスタンスの関係は1対1ではない)。
class Fighter{
private $level = 0; // レベル
public function fight($point){ // 戦う
$this->level += $point; // 戦った経験値分、レベルを加算
}
public function getLevel(){ // レベル取得
return $this->level;
}
}
// 2人のファイターのインスタンスを生成
$fighter1 = new Fighter();
$fighter2 = new Fighter();
$fighter1->fight(5);// ファイター1だけ戦ってみる
// 両方のファイターのレベル取得
$level1 = $fighter1->getLevel();
$level2 = $fighter2->getLevel();
print "ファイター1はレベル" . $level1 . "になりました";
print "ファイター2はレベル" . $level2 . "になりました";
▼結果
http://php.w4c.work/0-PROTOTYPE/class04.html
class HUMAN{//「HUMAN」という名のクラスを定義
var $comment = "これからPHPを勉強します";//「メンバ変数$comment」に「"これからPHPを勉強します"」をセット。「コメント」という人の属性(プロパティ)
var $favorite = "プログラミング";//「メンバ変数$favorite」に「"プログラミング"」をセット。「お気に入り」という人の属性(プロパティ)
var $studylevel = 0;//「メンバ変数$studylevel」に「0」をセット。「学習レベル」という人の属性(プロパティ)
function proclamation(){//「メンバ関数proclamation()」を定義。「宣言する」という人の機能(メソッド)
echo $this->comment."
";//「変数$this」は、自らを指すという特別な変数。メンバ関数内から、そのクラスのメンバ変数とメンバ関数にアクセスするために利用
}
function study($param = ""){//「メンバ関数study()」を定義。「勉強する」という人の機能(メソッド)
if($param == $this->favorite){
$this->result(1);
}else if($param){
$this->studylevel += 6;
$this->result(2);
}else{
$this->studylebvel -= 2;
$this->result(3);
}
}
function result($point){//「メンバ関数result()」を定義。「結果を知る」という人の機能(メソッド)
$comment = "";
switch($point){
case 1:
$comment = "初心を忘れないで
";
break;
case 2:
$comment = "デバッグができるようになれば、大したもの
";
break;
case 3:
$comment = "...
";
break;
}
echo $comment;
}
function check_studylevel(){//「メンバ関数studylevel()」を定義。「学習レベルを見る」という人の機能(メソッド)
echo $this->studylevel." level
";
}
}
$student = new HUMAN();//オブジェクトを生成
$student->proclamation();//メンバ関数を実行
$student->check_studylevel();
$student->study("プログラミング");
$student->study("デバッグ");
$student->study();
$student->check_studylevel();
$student->proclamation();
▼結果
http://php.w4c.work/0-PROTOTYPE/class2.html
▼クラス | 基本 | PHPStyleNote
http://php.w4c.work/originalSample/PHPStyleNote/basic/class/