PHP에는 클래스, 객체, 캡슐화, 다형성 등과 같은 다양한 객체 지향 프로그래밍 개념이 있습니다. 오버로딩은 PHP의 OOP 개념이기도 합니다. 함수 오버로딩 또는 메소드 오버로딩은 입력 매개변수 유형이 서로 다른 동일한 이름을 가진 여러 메소드를 생성할 수 있는 기능입니다. 이는 단순히 하나의 기능이 다양한 작업을 수행하는 능력으로 정의됩니다.
한 줄로 오버로딩 정의: "같은 이름이지만 구현이 다릅니다."
광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
아시다시피 메소드 오버로딩은 함수에 대해 수행됩니다. 따라서 함수는 각 함수에 전달된 인수에 따라 다양한 구현으로 오버로드될 수 있습니다. 예를 들어, 반지름이 주어졌을 때 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); ?>
위의 예에서는 전용 속성과 __call 메서드가 있는 Test라는 클래스를 선언했습니다. 두 개의 인수가 __call 메서드에 전달됩니다. __call 메소드 내에서 print() 명령문을 사용하고 인수를 var_dump하고 반환 값 x가 반환됩니다.
그런 다음 obj라는 이름의 클래스의 객체가 생성되고, 이 객체를 사용하면 이 메소드가 존재하지 않으므로 정의되지 않은 메소드가 호출되고 대신 __call()이 호출됩니다.
PHP에는 두 가지 유형의 오버로딩이 있는데, 각 유형에 대해 자세히 알아보겠습니다.
속성 오버로드는 객체가 설정될 때 동적 속성을 생성합니다. 이 속성은 클래스 인스턴스와 연관되어 있으며, 이 속성이 클래스 범위 내에서 선언되지 않은 경우 오버로드된 속성으로 간주됩니다. 이를 위해 추가 코드를 작성할 필요가 없습니다. 다음의 마법 메소드는 동일한 내용을 더 자세히 알려줍니다.
아래 언급된 작업은 오버로드된 속성으로 수행되는 작업입니다
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;
코드:
출력
속성 오버로딩과 마찬가지로 메서드 오버로딩은 클래스 범위 외부에 선언되는 동적 메서드를 생성합니다. 그리고 이는 __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(); ?>
코드:
출력:
1) 오버로딩 방법에는 공개 액세스 지정자가 사용됩니다.
2) 오버로딩 프로세스는 클래스 객체 생성 시 클래스 범위 내에 정의되지 않은 속성이나 메서드에 액세스할 수 있는 경우에 사용됩니다.
3) 매직 메서드는 속성이나 메서드를 오버로드하는 데 사용됩니다. 메소드 오버로딩에 사용되는 두 가지 매직 메소드 중 가장 많이 사용되는 메소드는 객체 컨텍스트에서 __call() 메소드이고, 덜 사용되는 메소드는 정적 컨텍스트에서 사용되는 __callStatic() 메소드입니다.
PHP의 오버로딩에 대한 안내입니다. 여기에서는 예제를 통해 PHP의 오버로딩 유형과 개념을 설명합니다. 자세한 내용은 다음 기사를 참조하세요.
위 내용은 PHP의 오버로딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!