>  기사  >  백엔드 개발  >  매직 메소드 __get() 인스턴스에 대한 자세한 설명(php 고급 객체 지향 튜토리얼 2)

매직 메소드 __get() 인스턴스에 대한 자세한 설명(php 고급 객체 지향 튜토리얼 2)

巴扎黑
巴扎黑원래의
2017-04-18 18:02:272124검색

이 이름을 보면 정말 고급스러운 느낌이 듭니다. 그렇습니다. 마법의 방법은 실제로 발전했습니다.

그럼 매직메소드란 무엇일까요?

PHP에서 두 개의 밑줄로 시작하는 메소드를 "매직 메소드"라고 합니다. 예를 들어 앞서 언급한 __construct(), __destruct(), __clone()과 __call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload() 등이 있습니다. , 그들은 모두 마법의 방법입니다.

PHP가 이러한 매직 메소드를 호출하도록 하려면 먼저 클래스에서 해당 메소드를 정의해야 합니다. 그렇지 않으면 PHP는 생성되지 않은 매직 메소드를 실행하지 않습니다.

참고:

매직 메소드는 PHP에 설정되어 있으므로 직접 생성할 수 없습니다. PHP에 이미 존재하는 것만 사용할 수 있습니다. 그렇지 않으면 오류가 보고됩니다.

아래에서는 여러 매직 메소드 중 흔히 사용되는 매직 메소드를 소개하겠습니다.

__get() 기능은 다음과 같습니다.

__get(): 액세스할 수 없는 속성(private, protected, 존재하지 않음)의 값을 읽을 때 PHP는 __get을 실행합니다. () 방법.

__get()에 대한 예를 살펴보겠습니다.

<?php
class Monkey{
public $name;
protected $food;
function __construct($name,$food){
$this->name = $name;
$this->food = $food;
}
function sayHello(){
echo &#39;<br/>我是&#39; . $this->name . &#39;我喜欢吃&#39; . $this->food;
}
}
$monkey = new Monkey(&#39;猴子&#39; , &#39;桃子&#39;)
$monkey -> sayHello();

위의 예는 이전에 클래스, 클래스 생성, 메서드 생성, 인스턴스화 및 최종 액세스에 대해 이야기했던 지식입니다.

이제 새로운 요구 사항을 제시합니다. 즉, 클래스 외부에서 직접 $food를 호출해야 합니다. 그러면 일부 사람들은 $food가 보호되는 속성이므로 직접 호출할 수 없다고 말할 것입니다. 그런데 요구는 이렇게 해야 하는데, 우리는 어떻게 해야 할까요? 이것은 우리의 매직 메소드 __get()이 사용되는 경우입니다. 다음 코드를 살펴보세요.

<?php
class Monkey{
public $name;
protected $food;
function __construct($name,$food){
$this->name = $name;
$this->food = $food;
}
function sayHello(){
echo &#39;<br/>我是&#39; . $this->name . &#39;我喜欢吃&#39; . $this->food;
}
//魔术方法
function __get($pro_name){
//先判断$pro_name是否存在
if(isset($this -> $pro_name)){
return $this -> $pro_name;
}else{
echo &#39;属性值不存在&#39;;
}
}
}
$monkey = new Monkey(&#39;猴子&#39; , &#39;桃子&#39;)
$monkey -> sayHello();
echo &#39;猴子喜欢吃&#39; . $monkey -> food;

매직 메서드를 사용하기 전에 먼저 $pro_name이 존재하는지 확인해야 합니다. 왜냐하면 위의 예에서는 $pro_name이 food를 호출하고, food가 존재하므로 호출이 가능하기 때문입니다. 그러나 음식이 a와 같이 존재하지 않는 다른 것으로 대체되면 __get() 메서드가 호출되지만 a가 존재하지 않는다는 오류가 보고됩니다. 그러므로 우리는 먼저 판단을 내려야 합니다.

위 내용은 매직 메소드 __get() 인스턴스에 대한 자세한 설명(php 고급 객체 지향 튜토리얼 2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.