LoginSignup
0
0

More than 5 years have passed since last update.

PHP Manual 読書会(10回目)(クラスとオブジェクト1)

Last updated at Posted at 2017-07-09

PHPに慣れる為に週1ぐらいで更新していきます。PHP Manualを読んで実験して行きます。

前回:PHP Manual 読書会(9回目)(関数)

クラスの基礎

<?php

class Sample
{
    public $name = 'hello';

    public function displayName() {
        echo $this->name;
    }
}

$obj = new Sample();

$obj->displayName();

PHP 5.4.0 以降では、新しく作成したオブジェクトのメンバーに、作成したその式の中でもアクセスできるようになりました。

つまり以下のような真似ができるようです。

echo (new DateTime())->format('Y');

クラスのプロパティとメソッドは、それぞれ別の "名前空間" に存在するので、 同じ名前のプロパティとメソッドを共存させることもできます。

名前の衝突はあっても問題ないが、

プロパティに 無名関数 を代入した場合に、その関数は直接呼び出せないということです。 その場合は、たとえば事前にプロパティを変数に代入しておく必要があります。 PHP 7.0.0 からは、括弧で囲むことでプロパティを直接呼び出せるようになりました。

その作用として、無名関数を入れると直接呼び出せなくなるようだ。

継承をする場合はextendsを使用。parentを使用して継承元のメソッドやプロパティへアクセスできる。

<?php

class Sample
{
    public $name = 'hello';

    public function displayName() {
        echo $this->name . "\n";
    }
}

class ExSample extends Sample
{
    public function displayName() {
        parent::displayName();
        echo "Ex hello\n";
    }
}

$obj = new ExSample();

$obj->displayName();

::classを使用するとクラス名を取得できる。namespaceを使用したときに便利に使えるようだ。

<?php

namespace Hoge {
    class Sample
    {
        public function displayClassName() {
            echo Sample::class . "\n";
        }
    }
    $obj = new Sample();
    $obj->displayClassName();
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0