У меня есть следующий код: определение Класса: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
Как я понимаю, частная переменная доступна только из собственного класса, и защищенная переменная доступна также fr om классы, расширяющие класс. У меня есть переменная $pinnNumber
. Поэтому я ожидал, что получаю сообщение об ошибке, если я позвоню $Jake->sayIt()
. Потому что $Jake
является членом class Employee
, который распространяется на class Person
. И переменная $pinnNumber
должна быть доступна только от class Person
, а не от class Employee
.
Где проблема?
Вы с доступом '$ pinnNumber' в сотруднике класса? Вы получаете доступ к 'sayIt()', который является общедоступным, таким образом вызываемым. – Daan
«Сотрудник» унаследован от «Личности». «Сотрудник» не ** напрямую ** не попадал в переменную 'private'. Он использовал метод, который поступает из родительского класса (он был унаследован), и этому родительскому классу разрешен доступ к переменной. Поэтому все хорошо. – Mjh
@ Даан Да, потому что $ Jack является членом Employee, поэтому он принимает все свойства Person. Все функции, переменные, но если $ pinnNumber является приватным, как это возможно, что показано на выходе. –