2017-01-14 9 views
0

Object Oriented PHP에서 private 메소드와 protected 메소드가 다른 점을 이해하지 못합니다. 메소드를 비공개로 만들면 extends 클래스에서 액세스 할 수 있습니다. 아래의 코드를 확인하십시오 - 당신이 이런 식으로 작업을 수행 할 때OOP에서 개인과 보호의 차이점은 무엇입니까?

<?php 

class person{ 

private function namedilam(){ 

    return "likhlam"; 

} 

public function kicu(){ 

    return $this->namedilam(); 

} 

} 

class second extends person{ 

} 

$info = new second; 

echo $info->kicu(); 
+0

직접 액세스 할 수없는 것 같습니다. '$ info-> namedilam()'을 호출 할 수 있습니까? – alayor

+0

당신은 public function kicu()를 private function notil()이라고 부르지 않습니다. – Sepultura

+1

[public, private, protected의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/4361553/what) - 공공 - 개인 - 보호의 차이) – dbrumann

답변

0

의 차이가 명확하게됩니다 :

class Liam { 
    private getFirstName() { 
     return "Liam"; 
    } 

    public function getName() { 
     return $this->getFirstName(); 
    } 
} 

class Max extends Liam { 
    private function getFirstName() { 
     return "Max"; 
    } 
} 

class Peter extends Liam { 
    public function getLiamsName() { 
     return $this->getFirstName(); 
    } 
} 

$max = new Max(); 
echo $max->getName(); 
// returns "Liam", not "Max" as you might expect 

$peter = new Peter(); 
echo $peter->getLiamsName(); 
// PHP Fatal error: Uncaught Error: Call to private method Liam::getFirstName() [...] 
맥스는 "리암"를 반환합니다

때문에 리암 클래스가 아닌에서 getName() 전화 getFirstName() 그것을 확장하는 반에서 하나. 즉, 개인 메서드를 사용하면 클래스에서이 메서드를 정확하게 호출 할 때마다이 메서드를 사용하고 덮어 쓰지 않도록 할 수 있습니다.

일반 용어로 설명하면 다음과 같습니다.

개인적인 방법은 수업 내에서만 액세스 할 수 있습니다. 그것을 덮어 쓰거나 액세스 할 수 없으며 클래스를 확장하는 클래스에서 액세스 할 수도 없습니다.

보호 방법은 클래스를 확장하는 클래스 내부에 액세스 할 수 있습니다,하지만 당신은 외부 등으로부터 그들을 호출 할 수 없습니다 :

$max = new Max(); 
$max->iAmProtected(); 

이것은 둘 다 개인 또는 보호 방법과 작동하지 않습니다.