@ PHP

OOP:静的プロパティ / 静的メソッド

オブジェクトを経由せずに、外部から直接呼び出すことができるプロパティが静的プロパティです。

静的プロパティは static キーワードをつけて宣言します

職業を表す Employee クラスを作成し、会社名を格納する静的プロパティ $company を定義してみます。

root
 ├── Person.php // Person クラス
 ├── Employee.php // Employee クラス
 └── static-property.php // 実行ファイル

Employee.php

<?php

class Employee
{

    public static $company = 'インターネーション';

}

Person.php

<?php

class Person
{

    public $firstName;

    public $lastName;

    public function __construct(string $firstName, string $lastName)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function show()
    {
        print "氏名:{$this->lastName}{$this->firstName}";
    }

}

static-property.php

<?php
require_once('Person.php');
require_once('Employee.php');

$p = new Person('太郎', '山田');

$p->show();

print '<hr>';

print '会社名:'.Employee::$company;

静的プロパティには ::(スコープ定義演算子)を使ってアクセスします。

静的メソッド

インスタンスを生成しなくても外部から直接呼び出せるメソッドが静的メソッドです。(静的メソッドに対して、オブジェクト経由で呼び出すメソッドをインスタンスメソッドと呼びます。)

静的メソッドは static キーワードをつけて宣言します。$this は現在のインスタンスを表す変数なので、インスタンスの生成を必要としない静的メソッドでは使用することができません。

Employee クラスに、会社名を取得する静的メソッド getCompany() を追加してみます。

root
 ├── Person.php // Person クラス
 ├── Employee.php // Employee クラス
 └── static-method.php // 実行ファイル

Employee.php

<?php

class Employee
{

    private static $company = 'インターネーション';

    public static function getCompany()
    {
        return self::$company;
    }

}

Person.php

<?php

class Person
{

    public $firstName;

    public $lastName;

    public function __construct(string $firstName, string $lastName)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function show()
    {
        print "氏名:{$this->lastName}{$this->firstName}";
    }

}

static-method.php

<?php
require_once('Person.php');
require_once('Employee.php');

$p = new Person('太郎', '山田');

$p->show();

print '<hr>';

print '会社名:'.Employee::getCompany();

外部から直接アクセスする必要がなくなった Employee クラスの $company プロパティはアクセス修飾子を praivat に変更しています。

self キーワードは特別なキーワードで、クラスコンテキストの内部でそのクラス自身を指し示すキーワードです。self::(スコープ定義演算子)の書式で、メソッド、定数、プロパティにアクセスすることができます。

静的メソッドには ::(スコープ定義演算子)を使ってアクセスします。

PHP: static キーワード – Manual