Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP 오버로딩

<시간/>

소개

오버로딩에 대한 해석은 C++ 또는 Java와 같은 다른 객체 지향 언어와 비교하여 PHP에서 다릅니다. 여기서 이 용어는 동일한 이름의 메서드가 두 번 이상 있지만 인수 및/또는 반환 유형이 다른 클래스를 가질 수 있는 능력을 의미합니다. 반면에 PHP에서는 속성과 메서드를 동적으로 생성하는 기능을 오버로딩이라고 합니다. PHP의 마법의 방법 (이중 밑줄로 시작하는 메서드 이름)은 동적 속성 및 메서드를 설정하는 데 사용됩니다.

속성 오버로딩을 위해 다음과 같은 마법의 방법이 사용됩니다 -

구문

public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed
public __isset ( string $name ) : bool
public __unset ( string $name ) : void

__set()은 보호되거나 비공개이거나 존재하지 않는 액세스할 수 없는 속성에 데이터를 쓰기 위해 실행됩니다.

__get()은 액세스할 수 없는 속성에서 데이터를 읽습니다.

__isset()은 접근할 수 없는 속성에 대해 isset() 또는 empty()를 호출합니다.

__unset()은 액세스할 수 없는 속성에서 unset()이 호출될 때 호출됩니다.

다음 코드에서 myprop이라는 동적 속성은 설정, 검색 및 설정 해제됨

예시

<?php
class myclass{
   public function __set($name, $value){
      echo "setting $name property to $value \n";
      $this->$name = $value;
   }
   public function __get($name){
      echo "value of $name property is ";
      return $this->$name;
   }
   public function __isset($name){
      return isset($this->$name);
   }
   public function __unset($name){
      unset($this->$name);
   }
}
$obj = new myclass();
$obj->myprop="test";
echo $obj->myprop . "\n";
var_dump (isset($obj->myprop));
unset($obj->myprop);
var_dump (isset($obj->myprop));
?>

출력

출력은 아래와 같습니다 -

setting myprop property to test
test
bool(true)
bool(false)

메서드 오버로딩

메소드를 동적으로 설정하는 데 사용되는 두 가지 매직 메소드는 __call() 및 __callStatic()

입니다.
public __call ( string $name , array $arguments ) : mixed
public static __callStatic ( string $name , array $arguments ) : mixed

__call()은 개체 컨텍스트에서 액세스할 수 없는 메서드를 호출할 때 트리거됩니다.

__callStatic()은 정적 컨텍스트에서 액세스할 수 없는 메서드를 호출할 때 트리거됩니다.

다음 예제는 PHP에서 메소드 오버로딩을 보여줍니다.

예시

<?php
class myclass{
   public function __call($name, $args){
      // Note: value of $name is case sensitive.
      echo "Calling object method $name with " . implode(" ", $args). "\n";
   }
   public static function __callStatic($name, $args){
      echo "Calling static method $name with " . implode(" ", $args). "\n";
   }
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>

출력

위의 코드는 다음과 같은 결과를 생성합니다.

Calling object method mymethod with Hello World!
Calling static method mymethod with Hello World!