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

tags: php

Posted by NI-Lab. (@nilab)