현재 위치: > 최신 기사 목록> PHP 과부하 및 응용 프로그램 분석의 기본 지식 개요

PHP 과부하 및 응용 프로그램 분석의 기본 지식 개요

gitbox 2025-06-28

PHP Reload 란?

PHP는 동적 유형 언어로서 스크립트를 실행할 때 변수가 사전 정의 된 유형이 필요하지 않으며 함수에는 매개 변수 유형이나 반환 유형이 없을 수도 있습니다. PHP 오버로드는 런타임에 클래스의 속성 및 메소드를 동적으로 생성 또는 수정하는 것을 말합니다.

PHP는 두 가지 주요 과부하 양식을 지원합니다.

1. 속성 과부하 : 마법 메소드 __get ()__set ()를 사용하여 클래스의 속성에 동적으로 액세스하거나 설정할 수 있습니다.

2. 메소드 과부하 : 마법 메소드 __call ()__callstatic ()을 사용하여 클래스 메소드를 동적으로 호출 할 수 있습니다.

속성 과부하

__get () 메소드

존재하지 않는 속성에 액세스 할 때 __get () 메소드가 호출됩니다. 이 마법 방법을 통해 속성을 동적으로 추가 할 수 있습니다.

 
class Test {
  private $data = [
    'name' => 'Tom',
    'age' => 18
  ];

  public function __get($name) {
    if (isset($this->data[$name])) {
      return $this->data[$name];
    }
    return null;
  }
}

$test = new Test();
echo $test->name;  // 산출 Tom
echo $test->age;   // 산출 18
echo $test->gender;  // 산출 null

__get () 메소드는 매개 변수 $ 이름 , 즉 속성 이름을 허용합니다. 속성이 존재하지 않으면 NULL이 반환됩니다.

__ 세트 () 메소드

존재하지 않는 속성에 값을 할당하면 __set () 메소드가 트리거됩니다. 이 마법 방법을 통해 속성과 그 값을 동적으로 추가 할 수 있습니다.

 
class Test {
  private $data = [];

  public function __set($name, $value) {
    $this->data[$name] = $value;
  }
}

$test = new Test();
$test->name = 'Tom';
echo $test->name;  // 산출 Tom

__set () 메소드는 두 개의 매개 변수를 허용합니다 : $ name (속성 이름)과 $ 값 (속성 값).

메소드 오버로드

__call () 메소드

존재하지 않는 메소드가 호출되면 __call () 메소드가 호출됩니다. 이 마법 방법을 사용하면 방법을 동적으로 추가 할 수 있습니다.

 
class Test {
  public function __call($name, $arguments) {
    if ($name == 'add') {
      return array_sum($arguments);
    }
    return null;
  }
}

$test = new Test();
echo $test->add(1, 2, 3);  // 산출 6
echo $test->subtract(10, 2);  // 산출 null

__call () 메소드는 두 개의 매개 변수를 허용합니다 : $ name (method name)과 $ arguments (메소드 매개 변수). 메소드가 존재하지 않으면 NULL이 반환됩니다.

__callstatic () 메소드

존재하지 않는 정적 메소드를 호출하면 __callstatic () 메소드가 호출됩니다. 이 방법은 정적 메소드에서 사용된다는 점을 제외하고 __call () 메소드와 유사합니다.

 
class Test {
  public static function __callStatic($name, $arguments) {
    if ($name == 'add') {
      return array_sum($arguments);
    }
    return null;
  }
}

echo Test::add(1, 2, 3);  // 산출 6
echo Test::subtract(10, 2);  // 산출 null

__callstatic () 메소드는 __call () 메소드와 유사하지만 정적 메소드에만 적용됩니다.