<?php
final class CanNotSetProperties extends BadMethodCallException
{
public function __construct($message)
{
parent::__construct($message);
}
public function exception($message)
{
return new static($message);
}
}
final class ConstructorIsVisible extends BadMethodCallException
{
public function __construct($message)
{
parent::__construct($message);
}
public function exception($message)
{
return new static($message);
}
}
trait Immutable
{
public function __set($property, $value)
{
throw CanNotSetProperties::exception();
}
protected function __construct()
{
throw ConstructorIsVisible::exception();
}
}
final class Test {
use Immutable;
public function __construct()
{
echo 'hello';
}
}
$test = new Test;
$test->__construct();