이 글은 주로 PHP의 일반적인 매직 메소드의 기능과 사용법을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.
개요
객체 지향 프로그래밍에서는 PHP를 사용합니다. 프로그래밍에 많은 편의를 제공하는 일련의 매직 메소드를 제공합니다. PHP의 매직 메소드는 일반적으로 __(두 개의 밑줄)로 시작하고 명시적인 호출이 필요하지 않지만 특정 조건에 의해 트리거됩니다.
시작하기 전에
PHP의 매직 메서드를 요약하기 전에 이후 예제에서 사용할 두 개의 클래스를 정의해 보겠습니다.
<?php class Device{ public $name,$battery,$data = [],$connection; protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }
Device 클래스에는 네 개의 멤버 속성과 두 개의 멤버 메서드가 있습니다.
<?php class Battery{ private $charge = 0; public function setCharge($charge){ $charge = (int)$charge; if($charge < 0){ $charge = 0; }else if($charge > 100){ $charge = 100; } $this->charge = $charge; } }
Battery 클래스에는 하나의 멤버 속성과 하나의 멤버 메서드가 있습니다.
생성자 및 소멸자
생성자와 소멸자는 객체가 생성되고 소멸될 때 각각 호출됩니다. 개체가 "파괴"되면 개체에 대한 참조가 없음을 의미합니다. 예를 들어 개체를 참조하는 변수가 삭제(설정 해제)되거나 다시 할당되거나 스크립트 실행이 종료되면 소멸자가 호출됩니다.
__construct()
__construct() 생성자는 단연 가장 일반적으로 사용되는 함수입니다. 객체를 생성할 때 생성자에서 일부 초기화 작업을 수행할 수 있습니다. 인스턴스화할 때 해당 매개변수 수가 전달되는 한 생성자에 대한 매개변수를 원하는 수만큼 정의할 수 있습니다. 생성자에서 예외가 발생하면 객체가 생성되지 않습니다.
<?php class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }
위 예제 코드에서 Device 클래스의 생성자는 멤버 속성에 값을 할당하고 connect() 메서드를 호출합니다.
생성자를 비공개 메서드로 선언하면 단순 패턴에서 자주 사용되는 클래스 외부에서 객체가 생성되는 것을 방지할 수 있습니다.
__desctruct()
소멸자는 일반적으로 객체가 소멸될 때 호출됩니다. 소멸자는 매개변수를 받지 않습니다. 데이터베이스 연결 닫기 등 일부 정리 작업은 소멸자에서 수행되는 경우가 많습니다.
__get()
존재하지 않는 속성에 액세스하려고 하면 마법 메서드 __get()이 호출됩니다. 액세스된 속성의 이름을 나타내는 매개변수를 수신하고 속성의 값을 반환합니다. 위의 Device 클래스에는 다음 코드와 같이 여기에서 역할을 하는 데이터 속성이 있습니다.
<?php class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } } $battery = new Battery(); $device = new Device($battery,'mac'); echo $device->aaa; //Notice: Undefined property: Device::$aaa
<?phpheader("Content-type: text/html; charset=utf-8"); class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } public function __get($name){ if(array_key_exists($name,$this->data)){ return $this->data[$name]; } return '属性不存在'; } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }$battery = new Battery(); $device = new Device($battery,'mac'); echo $device->aaa; //macconnected 属性不存在
이 매직 메소드에 가장 일반적으로 사용되는 위치는 "읽기 전용" 속성을 생성하여 액세스를 확장하는 것입니다. 제어. 위의 Battery 클래스에는 $charge라는 개인 속성이 있습니다. __get() 매직 메서드를 통해 이 속성을 확장할 수 있지만 클래스 외부에서는 수정할 수 없습니다. 코드는 다음과 같습니다:
<?php class Battery { private $charge = 0; public function __get($name) { if(isset($this->$name)) { return $this->$name; } return null; } }
__set()
__set() 접근할 수 없는 속성을 수정하려고 하면 매직 메서드가 호출됩니다. 이 메서드는 속성 이름을 나타내는 매개변수와 속성을 나타내는 매개변수를 받습니다. 속성의 값. 샘플 코드는 다음과 같습니다.
<?php header("Content-type: text/html; charset=utf-8"); class Device{ public $name,$battery,$data = [],$connection; public function __construct(Battery $battery,$name){ $this->battery = $battery; $this->name = $name; $this->connect(); } public function __get($name){ if(array_key_exists($name,$this->data)){ return $this->data[$name]; } return '属性不存在'; } public function __set($name,$value){ $this->data[$name] = $value; } protected function connect(){ $this->connection = 'resource'; echo $this->name.'connected'.PHP_EOL; } protected function disconnect(){ $this->connection = null; echo $this->name.'disconnected'.PHP_EOL; } }$battery = new Battery(); $device = new Device($battery,'mac'); $device->aaa = '哈哈'; echo $device->aaa; //macconnected 哈哈
__isset()
__isset() 접근할 수 없는 속성에 대해 isset() 메서드가 호출되면 매직 메서드가 호출됩니다. 이 메서드는 속성의 이름을 나타내는 매개변수를 받습니다. 속성이 존재하는지 여부를 나타내는 부울 값을 반환해야 합니다. 코드는 다음과 같습니다.
<?php class Device{ private function __isset($name){ return array_key_exists($name,$this->data); }
객체의 멤버가 공개인 경우 isset() 함수를 직접 사용할 수 있습니다. 비공개 멤버 속성인 경우 클래스
__unset()
__unset()에 __isset() 메서드를 추가해야 합니다. 액세스할 수 없는 속성을 삭제하기 위해 unset() 함수가 호출될 때 매직 메서드가 호출됩니다. 속성이 호출되면 속성의 이름을 나타내는 매개변수를 받습니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장 사항:
PHP의 매직 상수(변수), 매직 메서드(함수) 및 슈퍼전역 변수 소개
위 내용은 PHP의 일반적인 매직 메소드 함수 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!