I次のコードを持っている:インスタンスとPHP OOPはプライベート保護
<?php
class Person{
var $name;
public $height;
protected $socialInsurance = "yes";
private $pinnNumber = 12345;
public function __construct($personsName){
$this->name = $personsName;
}
public function setName($newName){
$this->name = $newName;
}
public function getName(){
return $this->name;
}
public function sayIt(){
return $this->pinnNumber;
}
}
class Employee extends Person{
}
そして一部: クラス定義を
<!DOCTYPE html>
<HTML>
<HEAD>
<META charset="UTF-8" />
<TITLE>Public, private and protected variables</TITLE>
</HEAD>
<BODY>
<?php
require_once("classes/person.php");
$Stefan = new Person("Stefan Mischook");
echo("Stefan's full name: " . $Stefan->getName() . ".<BR />");
echo("Tell me private stuff: " . $Stefan->sayIt() . "<BR />");
$Jake = new Employee("Jake Hull");
echo("Jake's full name: " . $Jake->getName() . ".<BR />");
echo("Tell me private stuff: " . $Jake->sayIt() . "<BR />");
?>
</BODY>
</HTML>
出力:
Stefan's full name: Stefan Mischook.
Tell me private stuff: 12345
Jake's full name: Jake Hull.
Tell me private stuff: 12345 // Here I was expecting an error
私は理解しているように、 private変数はそれ自身のクラスからのみアクセス可能であり、protected変数はfrクラスを拡張するクラス私はプライベート変数$pinnNumber
を持っています。だから私は$Jake->sayIt()
と呼ぶとエラーが出ると思った。 $Jake
はclass Employee
のメンバーであるため、class Person
に拡張されています。変数$pinnNumber
は、class Employee
からではなく、class Person
からのみアクセス可能である必要があります。
問題はどこですか?
あなたはクラスの従業員に '$ pinnNumber'にアクセスしている:あなたは
sayIt()
メソッドを拡張していなかったとして 、何の「アクセシビリティの問題」あなたはこのような何かをした場合、1があるでしょうがありませんか? 'sayIt()'にアクセスしています。これはpublicなので、呼び出し可能です。 – Daan'Employee'は' Person'から継承されました。 'Employee'は** private **変数に直接アクセスしませんでした**。親クラスから継承されたメソッドを使用し、その親クラスは変数にアクセスできます。したがって、それはすべて良いです。 – Mjh
@Daan $ JackはEmployeeのメンバであるため、Personのすべてのプロパティを取ります。すべての関数、変数ですが、$ pinnNumberがprivateの場合、出力にどのように表示されますか。 –