<?php
trait Singleton{
final public static function get_instance(...$args) {
static $instance = [];
$called_class = get_called_class();
if( !isset( $instance[ $called_class ] ) ) { $instance[$called_class] = new $called_class(...$args);
}
return $instance[ $called_class ];
}
}
class New_Post{
use Singleton;
protected function __construct( $first_name, $last_name, $email, $phone, $date ){
$this->first_name = $first_name;
$this->last_name = $last_name;
$this->email = $email;
$this->phone = $phone;
}
}
$post = New_Post::get_instance("First", "Last", "email", "123-456-7890", "today");
PD9waHAKCnRyYWl0IFNpbmdsZXRvbnsKCiAgICBmaW5hbCBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9pbnN0YW5jZSguLi4kYXJncykgewoKICAgICAgICBzdGF0aWMgJGluc3RhbmNlID0gW107CiAgICAgICAgJGNhbGxlZF9jbGFzcyA9IGdldF9jYWxsZWRfY2xhc3MoKTsKCiAgICAgICAgaWYoICFpc3NldCggJGluc3RhbmNlWyAkY2FsbGVkX2NsYXNzIF0gKSApIHsKICAgICAgICAgICAgJGluc3RhbmNlWyRjYWxsZWRfY2xhc3NdID0gbmV3ICRjYWxsZWRfY2xhc3MoLi4uJGFyZ3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZVsgJGNhbGxlZF9jbGFzcyBdOwogICAgfQp9CgpjbGFzcyBOZXdfUG9zdHsKICAgIHVzZSBTaW5nbGV0b247CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCAkZmlyc3RfbmFtZSwgJGxhc3RfbmFtZSwgJGVtYWlsLCAkcGhvbmUsICRkYXRlICl7CgkgICAgJHRoaXMtPmZpcnN0X25hbWUgPSAkZmlyc3RfbmFtZTsKCSAgICAkdGhpcy0+bGFzdF9uYW1lID0gJGxhc3RfbmFtZTsKCSAgICAkdGhpcy0+ZW1haWwgPSAkZW1haWw7CgkgICAgJHRoaXMtPnBob25lID0gJHBob25lOwoJICAgICR0aGlzLT5kYXRlID0gJGRhdGU7CiAgICB9CiB9CiAKICRwb3N0ID0gTmV3X1Bvc3Q6OmdldF9pbnN0YW5jZSgiRmlyc3QiLCAiTGFzdCIsICJlbWFpbCIsICIxMjMtNDU2LTc4OTAiLCAidG9kYXkiKTsKIAogdmFyX2R1bXAoJHBvc3QpOwogCiA=