Ich habe den folgenden Code: Klassendefinition:PHP OOP private protected
<?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{
}
und der Teil mit Instanzen:
<!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>
Ausgang:
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
Wie ich verstehe, Auf die private Variable kann nur von ihrer eigenen Klasse zugegriffen werden, und die geschützte Variable ist auch für fr zugänglich om die Klassen, die die Klasse erweitern. Ich habe die private Variable $pinnNumber
. Also habe ich erwartet, dass ich einen Fehler bekomme, wenn ich $Jake->sayIt()
rufe. Denn $Jake
ist Mitglied von class Employee
, das sich erweitert class Person
. Und die Variable $pinnNumber
sollte nur von class Person
zugänglich sein, nicht von der class Employee
.
Wo ist das Problem?
Sind Sie '$ pinnNumber' in der Klasse Mitarbeitern zugreifen? Sie greifen auf 'sayIt()' zu, das öffentlich und damit aufrufbar ist. – Daan
"Mitarbeiter" von "Person" geerbt. 'Mitarbeiter' hat nicht ** direkt ** auf die' private' Variable zugegriffen. Es wurde eine Methode verwendet, die von der übergeordneten Klasse stammt (sie wurde geerbt), und diese übergeordnete Klasse darf auf die Variable zugreifen. Deshalb ist alles gut. – Mjh
@Daan Ja, weil $ Jack Mitglied von Employee ist, also nimmt es alle Eigenschaften von Person. Alle Funktionen, Variablen, aber wenn $ pinnNumber privat ist, wie ist das möglich, das in der Ausgabe angezeigt wird. –