이 글은 주로 PHP의 일반적인 매직 메소드의 기능과 사용법을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.
개요
객체 지향 프로그래밍에서는 PHP를 사용합니다. 프로그래밍에 많은 편의를 제공하는 일련의 매직 메소드를 제공합니다. PHP의 매직 메소드는 일반적으로 __(두 개의 밑줄)로 시작하고 명시적인 호출이 필요하지 않지만 특정 조건에 의해 트리거됩니다.
시작하기 전에
PHP의 매직 메서드를 요약하기 전에 이후 예제에서 사용할 두 개의 클래스를 정의해 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?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 클래스에는 네 개의 멤버 속성과 두 개의 멤버 메서드가 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?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() 생성자는 단연 가장 일반적으로 사용되는 함수입니다. 객체를 생성할 때 생성자에서 일부 초기화 작업을 수행할 수 있습니다. 인스턴스화할 때 해당 매개변수 수가 전달되는 한 생성자에 대한 매개변수를 원하는 수만큼 정의할 수 있습니다. 생성자에서 예외가 발생하면 객체가 생성되지 않습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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 클래스에는 다음 코드와 같이 여기에서 역할을 하는 데이터 속성이 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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;
|
로그인 후 복사
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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;
|
로그인 후 복사
이 매직 메소드에 가장 일반적으로 사용되는 위치는 "읽기 전용" 속성을 생성하여 액세스를 확장하는 것입니다. 제어. 위의 Battery 클래스에는 $charge라는 개인 속성이 있습니다. __get() 매직 메서드를 통해 이 속성을 확장할 수 있지만 클래스 외부에서는 수정할 수 없습니다. 코드는 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 | <?php
class Battery {
private $charge = 0;
public function __get( $name ) {
if (isset( $this -> $name )) {
return $this -> $name ;
}
return null;
}
}
|
로그인 후 복사
__set()
__set() 접근할 수 없는 속성을 수정하려고 하면 매직 메서드가 호출됩니다. 이 메서드는 속성 이름을 나타내는 매개변수와 속성을 나타내는 매개변수를 받습니다. 속성의 값. 샘플 코드는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?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;
|
로그인 후 복사
__isset()
__isset() 접근할 수 없는 속성에 대해 isset() 메서드가 호출되면 매직 메서드가 호출됩니다. 이 메서드는 속성의 이름을 나타내는 매개변수를 받습니다. 속성이 존재하는지 여부를 나타내는 부울 값을 반환해야 합니다. 코드는 다음과 같습니다.
1 2 3 4 5 | <?php
class Device{
private function __isset( $name ){
return array_key_exists ( $name , $this ->data);
}
|
로그인 후 복사
객체의 멤버가 공개인 경우 isset() 함수를 직접 사용할 수 있습니다. 비공개 멤버 속성인 경우 클래스
__unset()
__unset()에 __isset() 메서드를 추가해야 합니다. 액세스할 수 없는 속성을 삭제하기 위해 unset() 함수가 호출될 때 매직 메서드가 호출됩니다. 속성이 호출되면 속성의 이름을 나타내는 매개변수를 받습니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!
관련 권장 사항:
PHP의 매직 상수(변수), 매직 메서드(함수) 및 슈퍼전역 변수 소개
위 내용은 PHP의 일반적인 매직 메소드 함수 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!