PHP 학습: 접근권 정보

19567 단어 PHPmemostudytech
php 공식 문서 -> Visibility

작업 환경


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

좋은 웹페이지 즐겨찾기