소개
PHP에서는 class를 사용하여 사용자 정의 복합 데이터 유형을 가질 수 있습니다. 예어. 클래스의 새 인스턴스는 개체입니다. 개체의 특성은 속성, 상수 및 메서드 멤버를 포함할 수 있는 클래스 정의에 따릅니다.
클래스 멤버의 접근성(가시성이라고도 함)은 해당 정의에 첨부된 가시성 접두사 키워드에 따라 다릅니다. PHP에는 세 가지 가시성 키워드(공개)가 있습니다. , 비공개 및 보호 . public 키워드로 선언된 클래스 멤버는 어디에서나 접근할 수 있습니다. 보호된 멤버는 해당 클래스 내에서 그리고 클래스를 상속하여 액세스할 수 있습니다. 반면에 private 멤버는 정의된 동일한 클래스에서만 액세스할 수 있으며 외부에서는 볼 수 없습니다.
재산 가시성
속성은 클래스 인스턴스의 속성입니다. 인스턴스 속성(객체마다 다른 값을 가짐) 또는 각 객체에 대해 동일한 값을 갖는 클래스 속성일 수 있습니다. 속성은 모든 유효한 PHP 데이터 유형일 수 있습니다. 속성에는 기본적으로 공개 가시성이 있습니다. var 키워드를 사용하여 속성을 정의하면(지금은 사용되지 않음) 공개로 처리됩니다.
예시
<?php class myclass{ public $fname="Ajay"; var $lname; //treated as public private $marks=100; protected $age=20; } $obj=new myclass(); echo "$obj->fname\n"; $obj->lname="Diwan"; echo "$obj->marks\n"; $obj->age=21; ?>
출력
다음 출력은 public 속성이 클래스 외부에서 액세스할 수 있음을 보여 주는 반면 private 및 protected 속성은 잡히지 않는 오류를 발생시킵니다.
Ajay PHP Fatal error: Uncaught Error: Cannot access private property myclass::$marks PHP Fatal error: Uncaught Error: Cannot access protected property myclass::$age
그러나 private 및 protected 속성은 같은 클래스의 함수 내부에서 사용할 수 있습니다.
예시
<?php class myclass{ public $fname="Ajay"; var $lname; private $marks=100; protected $age=20; function displaydata(){ $this->lname="Diwan"; echo "$this->fname $this->lname\n"; echo "marks=$this->marks age=$this->age"; } } $obj=new myclass(); $obj->displaydata(); ?>
출력
그러면 다음과 같은 결과가 생성됩니다. -
Ajay Diwan marks=100 age=20
방법 가시성
클래스 속성과 마찬가지로 클래스 메서드에도 public, private 및 protected 키워드를 사용하여 가시성을 할당할 수 있습니다. 메소드도 기본적으로 공개로 처리됩니다.
예시
<?php class myclass{ public $fname="Ajay"; var $lname; private $marks=100; protected $age=20; public function setname(){ $this->fname="Anil"; $this->lname="Dave"; echo "name changed\n"; } private function setmarks(){ $this->marks=90; } protected function setage(){ $this->age=21; } function setdata(){ $this->setname(); $this->setmarks(); $this->setage(); } function displaydata(){ $this->lname="Diwan"; echo "$this->fname $this->lname\n"; echo "marks=$this->marks age=$this->age"; } } $obj=new myclass(); $obj->setname();//works $obj->setmarks();//error $obj->setage();/error $obj->setdata(); //private and protected methods called withing public method $obj->displaydata(); ?>로 호출되는 private 및 protected 메소드
출력
그러면 다음과 같은 결과가 생성됩니다. -
name changed PHP Fatal error: Uncaught Error: Call to private method myclass::setmarks() from context '' PHP Fatal error: Uncaught Error: Call to protected method myclass::setage() from context '' Anil Dave marks=90 age=21
상속의 메서드 가시성
부모 자식에서 클래스 메서드를 재정의할 수 있습니다. 클래스 정의. 부모의 private 및 protected 메서드는 자식 클래스의 개체에 사용할 수 없습니다. 부모에서 보호되는 메서드는 자식 클래스 메서드에서 사용할 수 있습니다.
예시
<?php class testclass{ public $x=10; private $y=20; protected $z=30; private function test(){ echo "testclass private method\n"; } public function test1(){ echo "testclass public method\n"; } protected function test2(){ echo "testclass protected method\n"; } function test3(){ echo "x=$this->x y=$this->y z=$this->z\n"; } } class newclass extends testclass{ function test1(){ echo "newclass public method\n"; } public function test4(){ $this->test(); $this->test1(); $this->test2(); } } $obj=new newclass(); echo $obj->test1(); echo $obj->test3(); echo $obj->test4(); ?>
출력
다음 결과가 표시됩니다.
newclass public method x=10 y=20 z=30 PHP Fatal error: Uncaught Error: Call to private method testclass::test() from context 'newclass'
지속적인 가시성
PHP 7.1부터 가시성 모드는 상수와 함께 사용할 수 있습니다. 상수의 기본 가시성은 공개입니다.
예시
<?php class testclass{ public const X=10; private const Y=20; protected const Z=30; function showconst(){ echo "x=" . self::X ; echo "y=" . self::Y; echo "z=" . self::Z ; } } $obj=new testclass(); $obj->showconst(); echo testclass::Y . "\n"; echo testclass::Z . "\n"; ?>
출력
다음 결과가 표시됩니다.
x=10y=20z=30 PHP Fatal error: Uncaught Error: Cannot access private const testclass::Y PHP Fatal error: Uncaught Error: Cannot access protected const testclass::Z