PHP의 오버로딩

王林
풀어 주다: 2024-08-29 12:56:56
원래의
903명이 탐색했습니다.

PHP에는 클래스, 객체, 캡슐화, 다형성 등과 같은 다양한 객체 지향 프로그래밍 개념이 있습니다. 오버로딩은 PHP의 OOP 개념이기도 합니다. 함수 오버로딩 또는 메소드 오버로딩은 입력 매개변수 유형이 서로 다른 동일한 이름을 가진 여러 메소드를 생성할 수 있는 기능입니다. 이는 단순히 하나의 기능이 다양한 작업을 수행하는 능력으로 정의됩니다.

한 줄로 오버로딩 정의: "같은 이름이지만 구현이 다릅니다."

광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

PHP에서 오버로딩은 어떻게 작동하나요?

아시다시피 메소드 오버로딩은 함수에 대해 수행됩니다. 따라서 함수는 각 함수에 전달된 인수에 따라 다양한 구현으로 오버로드될 수 있습니다. 예를 들어, 반지름이 주어졌을 때 pi *r *r인 원의 넓이를 구하려면, 한 변의 길이가 주어졌을 때 변 * 변인 정사각형의 넓이를 구하려면, 삼각형의 넓이는 (밑변)입니다 * 높이) / 2는 기본 길이와 높이 등을 제공합니다.

Concept 오버로딩에는 Magic 메소드가 필요합니다.

Magic Methods는 __(이중 밑줄)로 시작하며 PHP에 의해 자동으로 호출됩니다. 또한 이들은 항상 클래스 외부가 아닌 클래스 내부에 정의됩니다. 다양한 매직 메서드는 __get(), __set,__construct(), __destruct(), __call(), __callStatic(),  __isset(), __unset(),

입니다.

오버로드가 수행되면 속성과 메서드가 동적으로 생성되며 이를 함께 엔터티라고 합니다.

엔터티라고도 합니다

  • 속성: 데이터 멤버
  • 메서드: 데이터 함수

__call() 메서드를 사용하여 매직 메서드가 어떻게 작동하는지 살펴보겠습니다

<?php
class Test{
private $a = array('one','two','three');
public function__call($method, $args) {
print "Method $method called:\n";
echo "<pre class="brush:php;toolbar:false">";
print_r($args);
return $this->a;
}
}
$obj = new Test();
$a = obj->anyMethod(1, 2, 3);
var_dump($a);
?>
로그인 후 복사

PHP의 오버로딩

위의 예에서는 전용 속성과 __call 메서드가 있는 Test라는 클래스를 선언했습니다. 두 개의 인수가 __call 메서드에 전달됩니다. __call 메소드 내에서 print() 명령문을 사용하고 인수를 var_dump하고 반환 값 x가 반환됩니다.

그런 다음 obj라는 이름의 클래스의 객체가 생성되고, 이 객체를 사용하면 이 메소드가 존재하지 않으므로 정의되지 않은 메소드가 호출되고 대신 __call()이 호출됩니다.

PHP의 오버로딩 유형

PHP에는 두 가지 유형의 오버로딩이 있는데, 각 유형에 대해 자세히 알아보겠습니다.

  • 속성 오버로딩
  • 메서드 오버로딩

1) 속성 오버로딩

속성 오버로드는 객체가 설정될 때 동적 속성을 생성합니다. 이 속성은 클래스 인스턴스와 연관되어 있으며, 이 속성이 클래스 범위 내에서 선언되지 않은 경우 오버로드된 속성으로 간주됩니다. 이를 위해 추가 코드를 작성할 필요가 없습니다. 다음의 마법 메소드는 동일한 내용을 더 자세히 알려줍니다.

아래 언급된 작업은 오버로드된 속성으로 수행되는 작업입니다

Setter 및 Getter 오버로드 속성(__set() 및 __get() 사용)

오버로드된 속성 설정 평가(__isset() 사용)

해당 속성 설정 실행 취소(__unset() 사용)

이러한 각 방법의 사용법을 이해해 보겠습니다

__set() => 오버로드된 속성을 초기화하는 데 사용됩니다.

__get() => 이미 초기화된 속성을 가져오는 데 사용됩니다

__isset() => 속성이 설정되어 있는지 확인하는 데 사용됩니다

__unset() => 속성을 설정 해제하는 데 사용됩니다.

__call() => 오버로드된 메서드를 초기화하는 데 사용됩니다

__callStatic() => 정적 메서드를 초기화하는 데 사용됩니다

다음 예시에서는 위의 모든 방법을 함께 사용합니다.

코드:

class PropertyOverloading {
public $details = array();
//declaring private property
private $j=20;
// setter operation
public function __set($name, $value) {
echo "<br />". " In the Setting operation. Set '$name = $value'";
$this->details[$name] = $value;
}
// getter operation
public function __get($name) {
echo "<br />". " In the Getting Operation. Get '$name  = '";
return $this->details[$name] . ' <br /> ';
}
// isset operation
public function __isset($name) {
echo "<br />". " In the isset Operation. isset '$name' ?";
return isset($this->details[$name]);
}
// unset operation
public function __unset($name) {
echo "<br />". " In the unset Operation. unset '$name' ";
unset($this->details[$name]);
}
// returning private property value
public function getPrivateProperty() {
return "<br />". " j = ".$this->j;
}
}
// creating object of class PropertyOverloading
// setter and getter methods are called
$obj = new PropertyOverloading();
$obj->x = 10;
echo $obj->x;
//call isset method
var_dump(isset($obj->x));
//call unset method
unset($obj->x);
//check whether object x is unset or not
var_dump(isset($obj->x));
//getting method to access the private property
echo "<br />". $obj-> getPrivateProperty();
//calling directly the private property
// throws error
echo "<br />accessing the private property, throws error";
echo "<br />".$obj->j;
로그인 후 복사

코드:

PHP의 오버로딩

출력

PHP의 오버로딩

2) 메소드 오버로딩

속성 오버로딩과 마찬가지로 메서드 오버로딩은 클래스 범위 외부에 선언되는 동적 메서드를 생성합니다. 그리고 이는 __call() 및 __callStatic() 매직 메서드를 사용하여 가능합니다. 이는 각각 객체 참조와 정적 참조를 기반으로 사용됩니다.

__call() -> 객체 참조에서 오버로드된 메서드를 호출하는 데 사용됩니다

__callStatic() -> 정적 참조에서 오버로드된 메서드를 호출하는 데 사용됩니다

다음 예는 자세한 내용을 알아보는 데 도움이 됩니다.

<?php
class MethodOverloading
{
public function __call($name,$param){
echo "--With object reference <br/>";
}
public static function __callStatic($name,$param){
echo "-----With static reference <br/>";
}
}
// creating object of class MethodOverloading
$obj = new MethodOverloading;
echo "Method Overloading <br/>";
// using the object reference
$obj->DemoTest();
// using the static reference
MethodOverloading::DemoTest();
?>
로그인 후 복사

코드:

PHP의 오버로딩

출력:

PHP의 오버로딩

규칙

1) 오버로딩 방법에는 공개 액세스 지정자가 사용됩니다.

2) 오버로딩 프로세스는 클래스 객체 생성 시 클래스 범위 내에 정의되지 않은 속성이나 메서드에 액세스할 수 있는 경우에 사용됩니다.

3) 매직 메서드는 속성이나 메서드를 오버로드하는 데 사용됩니다. 메소드 오버로딩에 사용되는 두 가지 매직 메소드 중 가장 많이 사용되는 메소드는 객체 컨텍스트에서 __call() 메소드이고, 덜 사용되는 메소드는 정적 컨텍스트에서 사용되는 __callStatic() 메소드입니다.

추천기사

PHP의 오버로딩에 대한 안내입니다. 여기에서는 예제를 통해 PHP의 오버로딩 유형과 개념을 설명합니다. 자세한 내용은 다음 기사를 참조하세요.

  1. PHP 어레이란 무엇인가요?
  2. C#의 오버로딩
  3. C++의 오버로딩
  4. C#의 오버로딩 및 재정의

위 내용은 PHP의 오버로딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!