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

In: php

24 2月 2010

最近ようやく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!

コメント

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

トラックバックURL:

Avatar

Hiroaki Sone

10月 12th, 2012 at 3:02 PM

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

Avatar

koutetsu666

10月 13th, 2012 at 12:02 AM

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

Comment Form

About this blog

ここは、SE見習いである私ことdaceloが、日夜習得していくシステム関連の備忘録、phpやWordPressTipsのネタ、あるいはSEOやWebマーケティング関連の雑感を投稿するブログです。 平日は大体毎日投稿しています。土日は休業日です。

カテゴリー

カテゴリー

アーカイブ