前提・実現したいこと
PHPのclassの継承におけるアクセス修飾子について疑問があります。
php
1//ファイル名:a.php 2<?php 3 4class tablea 5{ 6 public $x; 7} 8?>
php
1//ファイル名:b.php 2<?php 3 4require_once('a.php'); 5 6class tableb extends tablea 7{ 8 protected $x; 9} 10?>
php
1//ファイル名:c.php 2<?php 3ini_set('display_errors', "on"); 4require_once('b.php'); 5?>
上記の3つのファイルを作成し、
c.phpをブラウザで表示させるとエラーが発生します。
(発生している問題・エラーメッセージ参照)
エラーの警告通り
b.phpのアクセス修飾子をpublicにすると
エラーが解消されるのですがその理由がわかりません。
b.phpでpublicをprotectedに上書きする必要性は全く無いのですが、
なぜエラーになるかどうしても気になるので、
その理由を教えていただきたいです。
発生している問題・エラーメッセージ
Fatal error: Access level to tableb::$x must be public (as in class tablea) in /Users/.../Desktop/b.php on line 5
試したこと
$xのファイルごとのアクセス修飾子の組み合わせを試してみました。
① a.php: protected b.php: protected ->エラー表示なし
② a.php: protected b.php: public ->エラー表示なし
③ a.php: public b.php: public ->エラー表示なし
④ a.php: public b.php: protected ->エラー発生
④の組み合わせのみエラーが発生します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/13 06:43