Help us understand the problem. What is going on with this article?

エラー「Uncaught Error: Access to undeclared static property: 〜」の対処方法

発生状況

phpでクラスから別クラスの変数を取得しようとした際にエラー発生しました。

簡単な処理を以下に記載します。
別クラスから取得した変数を出力する処理で、yamada と出力されれば成功です!

処理内容
$person = new GetInfo;
$person->getName();

class PostInfo{
    public $name = 'yamada' . PHP_EOL;
}

class GetInfo{
    public function getName(){
        echo PostInfo::$name;
    }
}
結果
Fatal error: Uncaught Error: Access to undeclared static property: PostInfo::$name

このように PostInfoクラスの $name 変数が取り出せずにエラーになってしまいます。

解決方法

$name 変数前に static を記載することで解決しました。

example.php
$person = new GetInfo;
$person->getName();

class PostInfo{
    static public $name = 'yamada' . PHP_EOL;
}

class GetInfo{
    public function getName(){
        echo PostInfo::$name;
    }
}
結果
yamada

このように成功しました!

staticプロパティについて

こちらのエラーをわかりやすく解説しているサイトがありましたので、学んだことを簡単に引用させていただきました。

staticキーワードを付けたプロパティには、外部から直接アクセス出来ます。
staticキーワードを付けて宣言したプロパティは、クラスをインスタンス化せずに使用できます。
staticを指定していないプロパティにstatic形式でアクセスすると、「PHP Fatal error: Access to undeclared static property」エラーが発生します。

staticプロパティの参考サイト
http://akutaka00.blog102.fc2.com/blog-entry-69.html

まとめ

つまり今回「staticを指定していないプロパティにstatic形式でアクセス」していたことが原因だったことがわかりました。
プログラミングの学習をしていると様々なエラーが発生し心折れそうになりますがきちんと原因がわかると、知識が増えた・理解が深まったとポジティブな方向に持っていけることが良いことだなと思いました。

これからも理解したことを少しずつアウトプットしていければと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away