発生状況
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
を記載することで解決しました。
$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形式でアクセス」していたことが原因だったことがわかりました。
プログラミングの学習をしていると様々なエラーが発生し心折れそうになりますがきちんと原因がわかると、知識が増えた・理解が深まったとポジティブな方向に持っていけることが良いことだなと思いました。
これからも理解したことを少しずつアウトプットしていければと思います。