PHPのお勉強。
そもそもPHPのクラスの書き方がよくわかっていないので調べてみた。
PHP4では、クラス名と同じ名前のメンバ関数を定義すると、それが「コンストラクタ」になりました。PHP5でも、互換性のためにPHP4と同様にして「コンストラクタ」をつくれますが、“PHP5式”では「__construct()(アンダーライン2本で始まる)」が「コンストラクタ」となり、また「__destruct()(アンダーライン2本で始まる)」が「デストラクタ」になります。
ちなみに、“PHP4式”のコンストラクタと“PHP5式”のコンストラクタの両方が定義されていた場合は、“PHP5式”のコンストラクタがコールされます。
なお、PHPでは「__(アンダーライン2本)」で始まるクラスのメンバ関数名と通常の関数名を、“特殊な関数”として予約していて、「__(アンダーライン2本)」で始まる関数名を付けないよう推奨されているので、付けない様にしましょう。
【 ほでなすPHP 】 PHP5の基本 -> コンストラクタとデストラクタ
クラスのメンバ変数と、コンストラクタ内の変数のスコープがよくわからないのでサンプルコードを書いてみる。
$ cat ./sample.php
<?php
class Hoge{
var $var1;
var $var2;
function __construct($v1, $v2){
echo "***** begin Hoge constructor *****\n";
$this->var1 = $v1; // メンバ変数に代入
$var2 = $v2; // コンストラクタ内だけで使える変数に代入
echo '$this->var1 = ' . $this->var1 . "\n";
echo '$this->var2 = ' . $this->var2 . "\n";
echo '$var1 = ' . $var1 . "\n";
echo '$var2 = ' . $var2 . "\n";
echo "***** end Hoge constructor *****\n";
}
function __destruct(){
echo "***** begin Hoge destructor *****\n";
echo '$this->var1 = ' . $this->var1 . "\n";
echo '$this->var2 = ' . $this->var2 . "\n";
echo '$var1 = ' . $var1 . "\n";
echo '$var2 = ' . $var2 . "\n";
echo "***** end Hoge destructor *****\n";
}
}
$hoge = new Hoge('AAAAA', 'BBBBB');
echo '$hoge->var1 = ' . $hoge->var1 . "\n";
echo '$hoge->var2 = ' . $hoge->var2 . "\n";
?>
実行結果。
$ php ./sample.php
***** begin Hoge constructor *****
$this->var1 = AAAAA
$this->var2 =
$var1 =
$var2 = BBBBB
***** end Hoge constructor *****
$hoge->var1 = AAAAA
$hoge->var2 =
***** begin Hoge destructor *****
$this->var1 = AAAAA
$this->var2 =
$var1 =
$var2 =
***** end Hoge destructor *****
コンストラクタ内で $this から指定された変数はクラスのメンバ変数で、変数名だけを記述した場合はコンストラクタ内での局所変数となるらしい。
今回の環境は Mac OS X Lion on MacBook Air
$ uname -mrsv
Darwin 11.4.2 Darwin Kernel Version 11.4.2: Thu Aug 23 16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
$ php --version
PHP 5.3.26 with Suhosin-Patch (cli) (built: Jul 7 2013 18:22:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
-
Ref.
- 【 ほでなすPHP 】 PHP5の基本 -> コンストラクタとデストラクタ
- メンバ変数とメンバメソッド - クラスの定義 - PHP入門
- PHP: クラスの基礎 - Manual
- PHP: 変数のスコープ - Manual
tags: php
Posted by NI-Lab. (@nilab)