クラスのコンストラクタとデストラクタとともに、特性によって定義されたコンストラクタとデストラクタを起動するにはどうすればよいですか。例えば、
trait Audit
{
public function __construct()
{
parent::__construct(); // Doesn't work...
$this->_name = __CLASS__;
$this->AuditAction('Started');
}
public function __destruct()
{
parent::__destruct(); // Doesn't work...
$this->AuditAction('Ended');
echo $this->_log;
}
public function AuditAction($n)
{
$this->_log .= $this->GetCurrentTimeStamp() . ' ' . $this->_name . ": $n" . PHP_EOL;
}
private function GetCurrentTimeStamp()
{
return (new DateTime())->format('[Y-m-d H:i:s]');
}
private $_name, $_log = '';
}
class C
{
use Audit;
public function __construct()
{
}
public function __destruct()
{
}
}
$c = new C();
数行のテキストを取得する必要がありますが、代わりにクラス C のコンストラクターが明示的に呼び出されるため、何も取得できません。これを達成する方法はありますか?