PHPのアクセス修飾子についてのまとめ
アクセス修飾子の種類と特徴
以下の図はそれぞれのアクセス修飾子を用いた場合、
自クラス・継承クラス(子クラス)・他クラスからアクセスできるかどうかを表したものである。
実際にコードを書いてみて検証する
自クラスからアクセス場合
<?php
class MyClass {
public $test_01 = "パブリック";
protected $test_02 = "プロテクト";
private $test_03 = "プライベート";
public function echoPublic() {
echo $this->test_01;
}
public function echoProtected() {
echo $this->test_02;
}
public function echoPrivate() {
echo $this->test_03;
}
}
$test = new MyClass;
$test->echoPublic();
echo "<br>";
$test->echoProtected();
echo "<br>";
$test->echoPrivate();
<?php
class MyClass {
public $test_01 = "パブリック";
protected $test_02 = "プロテクト";
private $test_03 = "プライベート";
public function echoPublic() {
echo $this->test_01;
}
public function echoProtected() {
echo $this->test_02;
}
public function echoPrivate() {
echo $this->test_03;
}
}
$test = new MyClass;
$test->echoPublic();
echo "<br>";
$test->echoProtected();
echo "<br>";
$test->echoPrivate();
実行結果
パブリック
プロテクト
プライベート
→public,protected,privateすべてからアクセスできていることが確認できた
継承クラスからアクセスする場合
<?php
class MyClass {
public $test_01 = "パブリック";
protected $test_02 = "プロテクト";
private $test_03 = "プライベート";
public function echoPublic() {
echo $this->test_01;
}
public function echoProtected() {
echo $this->test_02;
}
public function echoPrivate() {
echo $this->test_03;
}
}
//継承クラス
class Children extends MyClass {
public function echoPublic() {
echo $this->test_01;
}
public function echoProtected() {
echo $this->test_02;
}
public function echoPrivate() {
echo $this->test_03;
}
}
$test = new Children;
$test->echoPublic();
echo "<br>";
$test->echoProtected();
echo "<br>";
$test->echoPrivate();
実行結果
パブリック
プロテクト
Notice: Undefined property: Children::$test_03 in /Applications/MAMP/htdocs/practice/access.php on line 28
→public,protectedからアクセスできていることが確認でき、privateからはアクセスできずエラーになっていることがわかる
他クラスからアクセスする場合
<?php
class MyClass {
public $test_01 = "パブリック";
protected $test_02 = "プロテクト";
private $test_03 = "プライベート";
public function echoPublic() {
echo $this->test_01;
}
public function echoProtected() {
echo $this->test_02;
}
public function echoPrivate() {
echo $this->test_03;
}
}
class Other {
//MyClass内の変数を使えるように、インスタンス化する
function __construct()
{
$this->my_class = new MyClass;
}
public function echoPublic() {
echo $this->my_class->test_01;
}
public function echoProtected() {
echo $this->my_class->test_02;
}
public function echoPrivate() {
echo $this->my_class->test_03;
}
}
$test = new Other;
$test->echoPublic();
echo "<br>";
$test->echoProtected();
echo "<br>";
$test->echoPrivate();
実行結果
パブリック
Fatal error: Uncaught Error: Cannot access protected property MyClass::$test_02 in /Applications/MAMP/htdocs/practice/access.php:29 Stack trace: #0
/Applications/MAMP/htdocs/practice/access.php(40): Other->echoProtected() #1 {main} thrown in /Applications/MAMP/htdocs/laravel_Udemy/access.php on line 29
→publicからアクセスできていることが確認でき、protected,privateからはアクセスできずエラーになっていることがわかる
Author And Source
この問題について(PHPのアクセス修飾子についてのまとめ), 我々は、より多くの情報をここで見つけました https://qiita.com/MiyakeNatsuho/items/6874ebef259f537d341c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .