이 이름을 보면 정말 고급스러운 느낌이 듭니다. 그렇습니다. 마법의 방법은 실제로 발전했습니다.
그럼 매직메소드란 무엇일까요?
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 '<br/>我是' . $this->name . '我喜欢吃' . $this->food; } } $monkey = new Monkey('猴子' , '桃子') $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 '<br/>我是' . $this->name . '我喜欢吃' . $this->food; } //魔术方法 function __get($pro_name){ //先判断$pro_name是否存在 if(isset($this -> $pro_name)){ return $this -> $pro_name; }else{ echo '属性值不存在'; } } } $monkey = new Monkey('猴子' , '桃子') $monkey -> sayHello(); echo '猴子喜欢吃' . $monkey -> food;
매직 메서드를 사용하기 전에 먼저 $pro_name이 존재하는지 확인해야 합니다. 왜냐하면 위의 예에서는 $pro_name이 food를 호출하고, food가 존재하므로 호출이 가능하기 때문입니다. 그러나 음식이 a와 같이 존재하지 않는 다른 것으로 대체되면 __get() 메서드가 호출되지만 a가 존재하지 않는다는 오류가 보고됩니다. 그러므로 우리는 먼저 판단을 내려야 합니다.
위 내용은 매직 메소드 __get() 인스턴스에 대한 자세한 설명(php 고급 객체 지향 튜토리얼 2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!