2016-09-26 2 views
-1

사실 저는 OOPS 개념을 처음 접했고 이해하기 어렵습니다. 또한 "PHP로 오버로드가 없습니다"라고 읽습니다. 나는 공부하고 있습니다. 이 예제 그러나 didnt는 나를 어디인가에 데려 간다.OOPS에서 함수 오버로딩 및 오버라이드 란 무엇입니까?

<?php 
class Toys{ 
    private $str; 
    public function __set($name,$value){ 
     $this->str[$name] = $value; 
    } 

    public function __get($name){ 
     echo "Overloaded Property name = " . $this->str[$name] . "<br/>"; 
    } 

    public function __isset($name){ 
     if(isset($this->str[$name])){ 
      echo "Property \$$name is set.<br/>";  
     } else { 
      echo "Property \$$name is not set.<br/>"; 
     } 
    } 

    public function __unset($name){ 
     unset($this->str[$name]); 
     echo "\$$name is unset <br/>"; 
    } 
} 

$objToys = new Toys; 

/* setters and getters on dynamic properties */ 
$objToys->overloaded_property = "new"; 
echo $objToys->overloaded_property . "\n\n"; 
/*Operations with dynamic properties values*/ 

isset($objToys->overloaded_property); 
unset($objToys->overloaded_property); 
isset($objToys->overloaded_property); 
?> 
+1

이 예제에서는 오버로드가 발생하지 않습니다. –

답변

1

Method Overriding

Method Overloading

간단한 설명

방법 겹쳐은 제공합니다. 구현체 또는 다른 객체를 호출하기로 결정한 것은 런타임에 동적으로 취해 지는데, 이는 객체가 호출되는 객체에 따라 다릅니다. 재정의 할 때 메서드의 시그니처가 동일하게 유지됩니다.

메서드 오버로드는 다형성과 관련이 없습니다. 이것은 다른 형식의 메소드 정의 (일반적으로 다른 매개 변수 수 또는 유형 수신)를 나타냅니다. 그것은 정적 다형성으로 볼 수 있습니다. 구현 또는 다른 것을 호출하는 결정은 코딩시에 취해진 다. 이 경우 메서드의 시그니처가 변경되어야합니다.

-2

매개 변수는 Object이므로이 객체에 값을 추가 할 수 있습니다. 따라서 과부하가 필요하지 않습니다. 원하는만큼 값을 전달할 수 있기 때문입니다.

-1

오버로드를 사용하면 동일한 이름이지만 다른 유형의 인수를 사용하여 함수를 작성할 수 있습니다. 컴파일러는 인수의 유형에 따라 컴파일 타임으로 올바른 함수를 선택합니다.

PHP에는 정적 유형이 없으므로 (컴파일 타임에 유형을 알 수 없음) PHP가 가지고 있지 않습니다.

OO에만 재정의가 존재합니다. 재정의 (Overriding)는 클래스에서 이미 정의 된 부모 클래스를 정의하는 것을 의미합니다. 따라서 이미 부모가 정의한 클래스의 재정의 메소드입니다. 방법의 동작을 수퍼/교체 따라서 수정 수퍼 항 또는 인터페이스를 하위 클래스 중 하나에 의해 정의 다시 때

+0

기본 사항은 정확합니다. 나는 코멘트가없는 투표를 이해하지 못한다. 그러나 우선 메소드는 인자 (실행)를 받아들이지 만, 인자 (정의)에 의해 정의된다. 인수는 매개 변수가 주어진 값입니다. 둘을 혼동하지 마십시오. – dbf