>  기사  >  백엔드 개발  >  PHP의 함수 적용 범위와 함수 오버로딩이란 무엇입니까?

PHP의 함수 적용 범위와 함수 오버로딩이란 무엇입니까?

藏色散人
藏色散人원래의
2019-01-18 16:09:284183검색

함수 오버로드 및 재정의(재작성이라고도 함)는 PHP의 OOP(객체 지향) 기능입니다. 함수 오버로딩에서는 여러 함수가 메서드 이름은 동일하지만 인수 개수나 유형이 다를 수 있습니다. 그러나 함수 재정의의 경우 여러 함수가 동일한 메서드 이름과 매개 변수 수를 갖습니다.

PHP의 함수 적용 범위와 함수 오버로딩이란 무엇입니까?

함수 오버로딩: 함수 오버로딩에는 인수의 수와 유형에 따라 다른 작업을 수행하는 동일한 함수 이름이 포함됩니다.

예를 들어 반지름이 주어진 어떤 모양의 면적을 구하려면 높이와 너비가 주어지면 원의 면적을 반환해야 하고, 그런 다음 직사각형 면적과 기타 면적을 반환해야 합니다. 다른 OOP 언어와 마찬가지로 함수 오버로드는 기본 메서드를 통해 수행할 수 없습니다.

PHP에서는 매직 메소드 __call()을 사용하여 함수 오버로드가 수행됩니다. 이 함수는 함수 이름과 매개변수를 사용합니다.

함수 오버로딩의 예:

<?php 
// 说明:PHP程序说明函数。
// PHP中的重载
//创建一个类型为shape的类
class shape { 
      
   // __call() 是一个魔术方法
   //函数名和参数
    function __call($name_of_function, $arguments) { 
              
        // 它将匹配函数名
        if($name_of_function == &#39;area&#39;) { 
              
            switch (count($arguments)) { 
                      
                // 如果只有一个参数
                //圆的面积
                case 1: 
                    return 3.14 * $arguments[0]; 
                          
                // 如果有两个参数,则面积为矩形;
                case 2: 
                    return $arguments[0]*$arguments[1]; 
            } 
        } 
    } 
} 
      
//声明Shape类型对象
$s = new Shape; 
      
echo($s->area(2)); 
echo "<br>"; 
      
// 调用矩形的area方法
echo ($s->area(4, 2)); 
?>

출력:

6.28
8

함수 재작성: 함수 재작성은 다른 OOP 프로그래밍 언어와 동일합니다. 함수 오버라이딩에서는 상위 클래스와 하위 클래스의 함수 이름과 매개변수 개수가 동일해야 합니다. 하위 클래스의 상위 메소드를 대체하는 데 사용됩니다. 재정의의 목적은 상위 클래스 메서드의 동작을 변경하는 것입니다. 이름과 매개변수가 동일한 두 가지 메서드를 재정의라고 합니다.

함수 적용 예(재작성):

<?php
//PHP程序实现
//函数覆盖
//这是父类
class P {

    // 父类函数demo
    function demo() {
        echo "Parent";
    }
}

// 这是子类
class C extends P {

    // 覆盖demo方法
    function demo() {
        echo "<br>Child";
    }
}


$p = new P;

$c= new C;

// 打印parent
$p->demo();

// 打印child
$c->demo();
?>

출력:

Parent
Child

이 글은 PHP의 함수 적용 및 함수 오버로딩에 대한 소개입니다. 필요한 친구들에게 도움이 되길 바랍니다!

위 내용은 PHP의 함수 적용 범위와 함수 오버로딩이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.