소개
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