Могут ли черты иметь свойства & amp; методы с личным & amp; защищенная видимость? Могут ли черты иметь конструктор, деструктор & amp; Класс-константа?

Я никогда не видел ни одной черты, где свойства и методы являются частными или защищенными.

Каждый раз, когда я работал с признаками, я замечал, что все свойства и методы, объявленные для любой характеристики, всегда являются только публичными.

Могут ли признаки иметь свойства и методы с частной и защищенной видимостью? Если да, как получить к ним доступ внутри класса / внутри какой-то другой черты? Если нет, почему?

Могут ли черты иметь конструктор и деструктор, определенные / объявленные в них? Если да, как получить к ним доступ внутри класса? Если нет, почему?

Могут ли признаки иметь константы, я имею в виду константы классов с разной видимостью? Если да, то как внутри класса / внутри какой-то другой черты? Если нет, почему?

Специальное примечание: Пожалуйста, ответьте на вопрос с помощью подходящих примеров, демонстрирующих эти концепции.

2

Решение

Черты могут иметь свойства и методы с частной и защищенной видимостью. Вы можете получить к ним доступ, как будто они принадлежат самому классу. Нет никакой разницы.

У черт могут быть конструктор и деструктор, но они не для самой черты, а для класса, который использует черту.

Черты не могут иметь постоянных. До версии 7.1.0 в PHP не было частных или защищенных констант.

trait Singleton{
//private const CONST1 = 'const1'; //FatalError
private static $instance = null;
private $prop = 5;

private function __construct()
{
echo "my private construct<br/>";
}

public static function getInstance()
{
if(self::$instance === null)
self::$instance = new static();
return self::$instance;
}

public function setProp($value)
{
$this->prop = $value;
}

public function getProp()
{
return $this->prop;
}
}

class A
{
use Singleton;

private $classProp = 5;

public function randProp()
{
$this->prop = rand(0,100);
}

public function writeProp()
{
echo $this->prop . "<br/>";
}
}

//$a1 = new A(); //Fatal Error too private constructor
$a1 = A::getInstance();
$a1->writeProp();
echo $a1->getProp() . "<br/>";
$a1->setProp(10);
$a1->writeProp();
$a1->randProp();
$a1->writeProp();
$a2 = A::getInstance();
$a2->writeProp();
$a2->randProp();
$a2->writeProp();
$a1->writeProp();
5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector