クラスの呼び出し方2通り Static(静的) & dynamic(動的)

最近ようやくPHPのオブジェクト指向の勉強を始めまして。遅ぇよ!ってな話ですが、「人生に遅すぎることはない」という安藤百福氏の名言を引用して話を先に進めたいと思います。

さて、オブジェクト指向ということは「クラスを作って、それをオブジェクトとして呼び出す」ということになります。

1.普通に(動的に)呼び出す

newでクラス名を指定してインスタンスとして呼び出します。
(砂の状態のイマジンに対して、契約して実体化させるようなイメージです。)

<?php
 
$y = new dacelo();
$y->test();
 
class dacelo {
        public $name = 'dacelo';
        function test() {
                echo "hello\n";
                echo $this->name;
        }
}

実行結果

hello
dacelo

daceloクラスの中では、メンバー変数としてnameが設定され、クラスの中でそれを$thisで呼び出しています。

2.スタティックに呼び出す

<?php
dacelo::test();
 
class dacelo {
        public $name = 'dacelo';
        function test() {
                echo "test\n";
                echo $this->name;
        }
}

実行結果

test
PHP Fatal error:  Using $this when not in object context in /home/dacelo/tmp/test.php on line 14
Fatal error:  Using $this when not in object context in /home/dacelo/tmp/test.php on line 14

メソッド(クラスの中の関数)を直接呼び出すには、コロン:を2つ付けて呼び出します。
このとき、インスタンスを作成していないので、$thisが使えません。フェイタルエラーになります。
$thisが自分として指し示すべきオブジェクトが存在していないということですね。

ではこのスタティック呼び出しはどういうときに使うかというと、クラスの中のメソッドのみを、関数のように使いたいという時に使います。
普通にその辺にぽっこり用意している関数との違いは、クラスでカプセル化することによって、名前空間の解決(関数名が被ったりしない)ということです。

広告

以上!Ciao!

About: dacelo


3 thoughts on “クラスの呼び出し方2通り Static(静的) & dynamic(動的)”

  1. Pingback: Hiroaki Sone
  2. PHPだと(staticでない)メソッドをstaticに呼び出すことができるらしい。中で$thisとかやったときに初めてエラーになる。なので、staticな変数にしかアクセスしてなければstaticメソッドとして使えるみたい。マジっすか。
    http://t.co/59OgVEEC

Leave a Reply

Your email address will not be published. Required fields are marked *