PHPのvarの意味や関連する使い方について

採用はこちら

PHPのvarは、主にクラスのプロパティを宣言するために使われてきたキーワードです。

現在のPHPでもvarは使用できますが、古い書き方として位置付けられており、新しくコードを書く場合はpublicprotectedprivateなどを使って可視性を明示する方法が一般的です。

たとえば、varを使うと次のようにプロパティを宣言できます。

class User
{
    var $name = 'Taro';
}

この$nameは、publicなプロパティとして扱われます。

現在のPHPでは、次のように書く方が分かりやすいでしょう。

class User
{
    public $name = 'Taro';
}

publicと明示することで、クラスの外部からアクセスできるプロパティであることがコード上でも分かりやすくなります。

目次

PHPでは通常の変数宣言にvarを使わない

JavaScriptのvarとは意味が異なる

JavaScriptを経験している人は、PHPでも変数を作るときにvarが必要だと考えることがあります。

JavaScriptでは、古い書き方として次のように変数を宣言できます。

var name = 'Taro';

一方、PHPでは通常の変数を作るためにvarは使用しません。

PHPでは、変数名の先頭に$を付けて値を代入します。

$name = 'Taro';
$age = 30;
$price = 1000;

したがって、通常のローカル変数を次のように書くことはできません。

var $name = 'Taro';

PHPにおけるvarは、通常の変数宣言用ではなく、クラスプロパティを宣言する旧式の構文として使われます。

PHPのクラスでvarを使う方法

varでプロパティを宣言する

古いPHPコードでは、次のような記述を見かけることがあります。

class Product
{
    var $name;
    var $price;
}

オブジェクトを作成した後は、次のようにプロパティへ値を代入できます。

$product = new Product();

$product->name = 'Notebook';
$product->price = 500;

echo $product->name;

PHPでは、オブジェクトの非staticプロパティへアクセスするときに->演算子を使用します。

クラス内部から自身のプロパティへアクセスする場合は、次のように$thisを使います。

class Product
{
    public $name;

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

現在はpublic・protected・privateを使う

プロパティの可視性を明示できる

現在のPHPでは、varではなくpublicprotectedprivateを使うことで、プロパティへアクセスできる範囲を明確にできます。

class Product
{
    public $name;
    protected $category;
    private $price;
}

それぞれの主な意味は次のとおりです。

キーワード主な意味
publicクラスの外部を含めてアクセスできる
protected宣言したクラスと継承関係にあるクラスからアクセスできる
private基本的に宣言したクラス内部からアクセスできる
var旧式のプロパティ宣言で、publicとして扱われる

たとえば、外部から直接変更させたくない値にはprivateを使えます。

class User
{
    private string $password;

    public function setPassword(string $password): void
    {
        $this->password = $password;
    }
}

アクセス範囲を明示できるため、新しいPHPコードではvarよりもpublicprotectedprivateを利用する方が適しています。

PHPではプロパティに型を指定できる

PHP 7.4以降では型付きプロパティが使える

PHP 7.4以降では、クラスのプロパティに型を指定できます。

たとえば、次のように記述できます。

class User
{
    public string $name;
    public int $age;
}

これにより、$nameには文字列、$ageには整数を扱うという意図を明確にできます。

初期値を設定することも可能です。

class User
{
    public string $name = '';
    public int $age = 0;
}

型を指定することで、次のようなコードよりもプロパティの用途が分かりやすくなります。

public $age;

よりも、

public int $age;

とした方が、整数を扱うプロパティだと一目で分かります。

型付きプロパティは初期化前に読み取れない

型付きプロパティを初期値なしで宣言した場合、値を設定する前に読み取ることはできません。

class User
{
    public string $name;
}

$user = new User();

echo $user->name;

このように、$nameへ値が設定されていない状態でアクセスするとエラーになります。

そのため、初期値を設定したり、コンストラクタで初期化したりする方法が一般的です。

class User
{
    public string $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

使用時は次のようになります。

$user = new User('Taro');

echo $user->name;

varと$varは意味が異なる

$varは単なる変数名

PHPのサンプルコードでは、次のような記述を見かけることがあります。

$var = 'Hello';

この場合のvarには、PHPキーワードとしての特別な意味はありません。

単純にvarという名前を付けた変数です。

varは英語のvariableを略した表現として、サンプルコードで使われることがあります。

たとえば、

$var = 100;

echo $var;

と、

$value = 100;

echo $value;

は、本質的には同じです。

実際の開発では、$varのような抽象的な名前よりも、次のように値の意味が分かる名前を使う方が読みやすくなります。

$userName = 'Taro';
$productPrice = 1000;
$totalAmount = 5000;
$isLoggedIn = true;

varとvar_dump()は別物

var_dump()は型や値を確認する関数

PHPの「var」を調べると、var_dump()という関数もよく登場します。

ただし、varキーワードとvar_dump()は別物です。

var_dump()は、変数や式の型と値を詳しく確認するための関数です。

$name = 'Taro';

var_dump($name);

出力例は次のようになります。

string(4) "Taro"

この例では、

  • 型がstring
  • データ長が4バイト
  • 値がTaro

であることを確認できます。

なお、string(n)nは単純な「文字数」とは限りません。

UTF-8の日本語などでは1文字が複数バイトになるため、文字数とバイト数が一致しない場合があります。

var_dump()でさまざまな型を確認する

整数を確認する

$number = 100;

var_dump($number);

出力例は次のとおりです。

int(100)

浮動小数点数を確認する

$price = 99.8;

var_dump($price);

出力例は次のようになります。

float(99.8)

真偽値を確認する

$isLogin = true;

var_dump($isLogin);

出力例は次のとおりです。

bool(true)

配列を確認する

$users = ['Taro', 'Hanako'];

var_dump($users);

配列の場合は、要素数、キー、値、型などを詳しく確認できます。

Webアプリケーションの開発では、次のようにデバッグ目的で使用することもあります。

var_dump($_POST);
var_dump($_GET);
var_dump($result);

ただし、本番環境でvar_dump()の出力を表示すると、内部データや個人情報、設定値などが利用者に見えてしまう可能性があります。

デバッグ用の出力は、本番公開前に削除するか適切なログ出力へ切り替える必要があります。

複数の値も確認できる

var_dump()には複数の値を渡すこともできます。

$name = 'Taro';
$age = 30;

var_dump($name, $age);

複数の変数をまとめて確認したい場合に便利です。

print_r()との違い

print_r()は構造を確認しやすい

PHPには、var_dump()と似た用途で使われるprint_r()があります。

$array = [
    'name' => 'Taro',
    'age' => 30,
];

print_r($array);

print_r()は、配列やオブジェクトの構造を比較的人間が読みやすい形で表示できます。

一方、var_dump()では値だけでなく型も詳しく表示されます。

主な使い分けは次のように考えると分かりやすいでしょう。

関数主な用途
print_r()配列やオブジェクトの構造を読みやすく確認する
var_dump()型や値を詳しく確認する

デバッグ時に型まで確認したい場合は、var_dump()が便利です。

var_export()との違い

PHPコードとして扱いやすい形式で表現できる

var_export()も変数の内容を確認するために使われる関数です。

$data = [
    'name' => 'Taro',
    'age' => 30,
];

var_export($data);

出力例は次のようになります。

array (
  'name' => 'Taro',
  'age' => 30,
)

var_export()の特徴は、PHPコードとして解析可能な形式で値を表現できる点です。

また、第2引数にtrueを指定すると、直接出力するのではなく文字列として取得できます。

$result = var_export($data, true);

主な違いを整理すると次のとおりです。

関数主な用途
var_dump()型と値を詳しく確認する
print_r()配列やオブジェクトの構造を確認する
var_export()PHPコードとして扱いやすい形式で値を表現する

gettype()で変数の型を確認する

型だけを取得したい場合に使える

値の内容ではなく、型だけを確認したい場合はgettype()を利用できます。

$value = 100;

echo gettype($value);

出力例は次のようになります。

integer

ただし、プログラムの処理を型によって分岐させたい場合は、目的に応じて次のような型判定関数を利用する方法もあります。

is_int()
is_string()
is_array()
is_bool()
is_object()

たとえば、整数かどうかを確認する場合は次のように書けます。

$value = 100;

if (is_int($value)) {
    echo '整数です';
}

isset()で変数が設定されているか確認する

宣言済みかつnullではないかを判定する

isset()は、変数が宣言されていて、かつ値がnullではないかを確認するために使います。

$name = 'Taro';

if (isset($name)) {
    echo '変数が設定されています';
}

一方、次のようにnullが代入されている場合はfalseになります。

$value = null;

var_dump(isset($value));

出力結果は次のとおりです。

bool(false)

フォーム処理などでも、次のように利用されることがあります。

if (isset($_POST['name'])) {
    $name = $_POST['name'];
}

ただし、フォームから受け取った値を実際に利用するときは、isset()による存在確認だけでなく、値の形式や内容も適切に検証する必要があります。

empty()で値が空か確認する

false相当の値も空と判定される

empty()は、変数が空とみなされるかどうかを確認するために使います。

$name = '';

if (empty($name)) {
    echo '空です';
}

PHPでは、次のような値もempty()で空と判定されます。

0
'0'
false
null
[]
''

そのため、0'0'を有効な値として扱いたい場合は注意が必要です。

たとえば、

if (empty($value)) {

だけでは、0も空として処理されます。

空文字列だけを判定したい場合は、次のように厳密比較を使用できます。

if ($value === '') {
    echo '空文字列です';
}

用途に応じてempty()と厳密比較を使い分けることが重要です。

unset()で変数を破棄する

不要になった変数を削除できる

変数を破棄したい場合はunset()を使用します。

$name = 'Taro';

unset($name);

配列の特定要素だけを削除することもできます。

$users = [
    'Taro',
    'Hanako',
    'Jiro',
];

unset($users[1]);

ただし、この場合は数値キーが自動的に詰め直されません。

削除後のキーは、

0
2

のように飛び番になることがあります。

連番へ戻したい場合は、array_values()を使えます。

$users = array_values($users);

PHPの関数では引数も変数として扱われる

通常は値渡しとして扱われる

PHPでは、関数のパラメータも変数として扱われます。

function hello($name)
{
    echo 'Hello ' . $name;
}

この場合、$nameが関数のパラメータです。

PHPの引数は、参照渡しを明示しない限り基本的に値渡しとして扱われます。

ただし、PHP内部ではコピーオンライトなどの仕組みが利用されているため、値渡しだからといって、関数を呼び出すたびに必ずデータ全体が即座に複製されるわけではありません。

&を使うと参照渡しにできる

呼び出し元の変数を関数内部から変更したい場合は、&を使って参照渡しにできます。

function increment(&$number)
{
    $number++;
}

$value = 10;

increment($value);

echo $value;

実行すると、

11

と表示されます。

参照渡しは便利ですが、関数内部の処理によって呼び出し元の変数が変更されるため、多用すると処理の流れを追いにくくなる場合があります。

PHPでは変数の型を後から変更できる

同じ変数に異なる型の値を代入できる

PHPでは、通常の変数に固定された型を宣言する必要はありません。

たとえば、次のコードは有効です。

$value = 100;

var_dump($value);

$value = 'Hello';

var_dump($value);

最初は整数、次に文字列が同じ$valueへ代入されています。

一方、現在のPHPでは、関数の引数や戻り値、クラスプロパティなどに型宣言を付けることができます。

function calculatePrice(int $price): int
{
    return $price * 2;
}

クラスでも次のように指定できます。

class Product
{
    public string $name;
    public int $price;
}

型宣言を活用すると、コードが何を扱うのかが分かりやすくなり、想定外の値を早い段階で発見しやすくなります。

ただし、型宣言に適合しない値が渡されたときの挙動は、型の種類やstrict_typesの設定などによって異なります。

必ずしも「型が少しでも違えば即座にエラーになる」とは限らない点には注意が必要です。

var・$var・var_dump()の違い

それぞれまったく役割が異なる

PHPで「var」という文字を見た場合は、どの形で使われているかを確認することが重要です。

整理すると次のようになります。

記述意味
varクラスプロパティを宣言する旧式のキーワード
$varvarという名前を持つ通常の変数
var_dump()型や値を詳しく表示する関数
var_export()PHPコードとして扱いやすい形式で値を表現する関数

たとえば、

class User
{
    var $name;
}

では、varはクラスプロパティを宣言するキーワードです。

一方、

$var = 100;

では、$varは単なる変数名です。

さらに、

var_dump($var);

では、var_dump()が関数で、$varが引数として渡されている変数です。

見た目は似ていますが、それぞれ役割は異なります。

PHPのvarを使う際の注意点

新しいコードではvarを積極的に使わない

PHPのvarは現在でも使用できますが、新規開発で積極的に利用する必要はほとんどありません。

たとえば、

class User
{
    var $name;
}

よりも、

class User
{
    public string $name;
}

と書いた方が、

  • 外部からアクセスできること
  • 文字列を扱うプロパティであること

を明確にできます。

そのため、varは「古いPHPコードを読むために知っておくキーワード」と考えると分かりやすいでしょう。

本番環境にvar_dump()を残さない

var_dump()はデバッグに便利ですが、本番環境でそのまま表示すると情報漏えいにつながる可能性があります。

特に、

var_dump($_POST);
var_dump($_SESSION);
var_dump($config);

などを公開環境で表示すると、個人情報やセッション情報、設定情報などが利用者に見える可能性があります。

開発中の確認に使用したvar_dump()は、本番公開時には削除するか、適切なロギング処理へ置き換えることが重要です。

PHPのvarについてまとめ

PHPのvarは、クラスのプロパティを宣言するために使われてきた旧式のキーワードです。

現在のPHPでも使用できますが、新しくコードを書く場合は、publicprotectedprivateなどを使って可視性を明示する方法が一般的です。

また、「PHP var」という言葉には、次のような関連する記述があります。

var          :クラスプロパティを宣言する旧式のキーワード
$var         :varという名前の通常の変数
var_dump()   :変数の型や値を詳しく確認する関数
var_export() :PHPコードとして扱いやすい形式で値を表現する関数

特に初心者が押さえておきたいのは、PHPでは通常の変数を宣言するためにvarを使わないという点です。

通常の変数は、次のように$から始めて使用します。

$name = 'Taro';

クラスのプロパティを宣言する場合も、現在では次のように可視性や型を明示する書き方が適しています。

class User
{
    public string $name;
}

varの意味だけでなく、$varvar_dump()var_export()との違いまで理解しておくと、PHPのサンプルコードや古いソースコードも読み解きやすくなります。

以上、PHPのvarの意味や関連する使い方についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次