⊗ppOpMgROP 89 of 107 menu

PHP 객체지향 프로그래밍에서 읽기 전용 속성

모든 속성이 비공개(private)인 클래스를 살펴보겠습니다:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

이제 이 속성들이 외부 세계에서 읽기 전용으로만 접근 가능하도록 만들어 보겠습니다. 이전에 우리는 각 속성에 대해 게터(getter)를 만들고 세터(setter)를 만들지 않는 방식으로 이를 구현했습니다.

이제 이 문제를 해결하기 위해 마법 메서드 __get를 사용해 보겠습니다. 이 메서드에서 요청된 속성의 값을 반환할 것입니다. 방법은 다음과 같습니다: 요청된 속성의 이름은 __get 메서드의 매개변수, 우리의 경우에는 $property로 전달됩니다.

이는 변수에 저장된 이름의 속성을 다음과 같이 읽을 수 있다는 의미입니다: $this->$property (속성 이름은 변수이므로, 앞에 달러 기호가 붙습니다, 우리는 이전 강의에서 이것을 배웠습니다).

설명한 __get 메서드를 만들어 보겠습니다:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

속성을 읽기 위해 이를 사용해 보겠습니다:

<?php $test = new Test; echo $test->prop1; // 1을 출력합니다 echo $test->prop2; // 2를 출력합니다 ?>

속성에 무언가를 쓰려고 시도하면 오류가 발생합니다:

<?php $test = new Test; $test->prop1 = 2; // 오류를 발생시킵니다 ?>

이것이 바로 우리에게 필요한 것입니다: 속성은 읽을 수 있지만 쓸 수는 없습니다.

존재하지 않는 속성을 읽으려고 시도하면 오류가 발생합니다:

<?php $test = new Test; echo $test->prop3; // 오류를 발생시킵니다 ?>

또한 다음 세부 사항에 주의하십시오: 이전 방식으로 읽기 전용 속성을 만들었을 때, 속성을 읽기 위해 우리는 게터 메서드를 사용했습니다.

새로운 방식에서는 마치 공개(public) 속성인 것처럼 속성에 직접 접근할 것입니다. 그러나 비공개 속성인 것처럼 그 안에 쓸 수는 없을 것입니다.

다음과 같은 User 클래스가 주어졌다고 가정해 보겠습니다. 이 클래스의 속성들은 게터를 통해 읽기 전용으로만 접근 가능합니다:

<?php class User { private $name; private $age; public function __construct($name, $age) { $this->name = $name; $this->age = $age; } public function getName() { return $this->name; } public function getAge() { return $this->age; } } ?>

이 클래스의 코드를 게터 대신 마법 메서드 __get를 사용하도록 수정하십시오.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부