PHP 학습: 접근권 정보
작업 환경
php 7.4.22
액세스란 무엇입니까?
PHP는 변수 및 함수를 정의할 때 액세스권 속성을 정의할 수 있습니다.
속성도 필드라고 하는데
public
, private
, protected
세 가지가 있다.public $public = 'public';
private $private = 'private';
protected $protected = 'protected';
기본적으로 클래스에서 사용되며 외부로부터의 접근 범위를 설정할 수 있다.public
도 클래스에서 호출할 수 있고 private
클래스 자체에서만 호출할 수 있다.protected
클래스 자체와 계승된 클래스라면 호출할 수 있다.Public
<?php
class Foo {
// publicプロパティの定義
public $public = 'Public';
// Fooクラス内で$publicを呼び出す
public function getPublic() {
return $this->public.' from '.__METHOD__;
}
}
$foo = new Foo();
// 外部からの変数呼び出し
echo $foo->public.'<br>';
// 結果:Public
// 外部からのFooクラスの関数を使っての呼び出し
echo $foo->getPublic().'<br>';
// 結果:Public from Foo::getPublic
PHP에서 속성을 지정하지 않은 경우 모두 public
로 처리됩니다.<?php
//publicになる
$foo = 'foo';
//publicになる
function getFoo() { // public
return $this->foo;
}
Private
그 반만 혼자 부를 수 있다.
<?php
class Foo {
// privateプロパティの定義
private $private = 'Private';
// Fooクラス内で$privateを呼び出す
public function getPrivate() {
return $this->private.' from '.__METHOD__;
}
}
$foo = new Foo();
// 外部からの変数呼び出し
// privateプロパティにアクセスしようとしているため、エラーとなる。
echo $foo->private.'<br>';
//結果: Fatal error: Uncaught Error: Cannot access private property
// 外部からFooクラス内の関数を使っての呼び出し
// クラスそのものの内部の関数からのアクセスなので、問題なく呼び出せる。
echo $foo->getPrivate().'<br>';
//結果: Private from Foo::getPrivate
Foo의 FooChild를 계승하여 부모 Foo의 private
속성에 접근하려면 어떻게 됩니까?<?php
class Foo {
// 親側でprivateプロパティの定義
private $private = 'Private';
// Fooクラス内で$privateを呼び出す
public function getPrivate() {
return $this->private.' from '.__METHOD__;
}
}
class FooChild extends Foo {
// FooChildクラス内でFooの$privateを呼び出す
public function getPrivateChild() {
return $this->private.' from '.__METHOD__;
}
}
$foo_child = new FooChild();
// 外部からの変数呼び出し
// 変数への直接の呼び出しになり、NULLになる。
echo $foo_child->private.'<br>';
// NULL
// 外部からFooクラス内の関数を使っての呼び出し
// Fooクラス内の関数を使っての$privateへのアクセスなので、出力される。
echo $foo_child->getPrivate().'<br>';
// Private from Foo::getPrivate
// 外部からFooChildクラス内の関数を使っての呼び出し
// FooChildの中で定義されている関数からの呼び出しのため、NULLとなる。
echo $foo_child->getPrivateChild().'<br>';
// NULL
Protected
반 외부에서 불러낼 수는 없지만 그 반을 방문해 스스로 그 반을 물려받은 반을 방문할 수 있다.
<?php
class Foo {
// protectedプロパティの定義
protected $protected = 'Protected';
// Fooクラス内で$protectedを呼び出す
public function getProtected() {
return $this->protected.' from '.__METHOD__;
}
}
$foo = new Foo();
// 外部からの変数呼び出し
// protectedプロパティにアクセスしようとしているため、エラーとなる。
echo $foo->protected.'<br>';
// Fatal error: Uncaught Error: Cannot access protected property Foo::$protected
// 外部からFooクラス内の関数を使っての呼び出し
// クラスそのものの内部の関数からのアクセスなので、問題なく呼び出せる。
echo $foo->getProtected().'<br>';
//Protected from Foo::getProtected
여기까지private
의 행위는 거의 같지만 유상속을 할 때 차이가 있다.<?php
class Foo {
// 親側でprivateプロパティの定義
protected $protected = 'Protected';
// Fooクラス内で$protectedを呼び出す
public function getProtected() {
return $this->protected.' from '.__METHOD__;
}
}
class FooChild extends Foo {
// FooChildクラス内でFooの$protectedを呼び出す
public function getProtectedChild() {
return $this->protected.' from '.__METHOD__;
}
}
$foo_child = new FooChild();
// 外部からの変数呼び出し
// 変数への直接の呼び出しになり、protectedではエラーとなる。
echo $foo_child->protected.'<br>';
// Fatal error: Uncaught Error: Cannot access protected property FooChild::$protected
// 外部からFooクラス内の関数を使っての呼び出し
// Fooクラス内の関数を使っての$protectedへのアクセスなので出力される。
echo $foo_child->getProtected().'<br>';
// Protected from Foo::getProtected
// 外部からFooChildクラス内の関数を使っての呼び出し
// FooChildクラス内に存在する関数から呼び出しのため出力される。
echo $foo_child->getProtectedChild().'<br>';
// Protected from FooChild::getProtectedChild
Reference
이 문제에 관하여(PHP 학습: 접근권 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kafeine/articles/9b167a0d89f9d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)