2017-01-14 5 views
0

私はオブジェクト指向PHPのプライベートメソッドとプロテクトメソッドの違いは何か分かりません。メソッドをprivateにした後、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という名前の関数ではなく、ltam()と呼びます。 – Sepultura

+1

[public、private、protectedの違いは何ですか?](http://stackoverflow.com/questions/4361553/what - 公的 - 私的 - および保護された - の違い) – dbrumann

答えて

0

あなたはこのようにそれを行うときの違いが明確になるだろう:リアムクラスでgetName()通話getFirstName()ので

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() [...] 

マックスは、「リアムは」ありませんが返されますそれを拡張するクラスから1つ。つまり、プライベートメソッドでは、クラス内のどのメソッドでもこのメソッドを正確に呼び出すと、このメソッドが使用され、上書きされないことを確認できます。

一般的に説明すると:

プライベートメソッドはクラス内でのみアクセスできます。彼らはそれを上書きしたりアクセスしたりすることはできません。

保護されたメソッドは、クラス拡張クラスで内部にアクセス可能ですが、あなたは次のように外からそれらを呼び出すことはできません:これは、プライベートまたは保護された方法では動作しませんどちらも

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

関連する問題