new
Para crear una instancia de una clase, se debe emplear la palabra reservada
new. Un objeto se creará siempre a menos que el objeto tenga un
constructor que arroje una
excepción en caso de error. Las
clases deberían ser definidas antes de la instanciación (y en algunos casos
esto es un requerimiento).
Si se emplea un string que contenga el nombre de una clase con
new, se creará una nueva instancia de esa clase. Si
la clase estuviera en un espacio de nombres, se debe utilizar su nombre completo
al realizar esto.
Nota:
Si no hay argumentos para pasar al constructor de la clase,
se pueden omitir los paréntesis después del nombre de la clase.
Ejemplo #3 Creación de una instancia
$instancia= newClaseSencilla();// Esto también se puede hacer con una variable:$nombreClase='ClaseSencilla';$instancia= new$nombreClase();// new ClaseSencilla()?>
En el contexto de una clase, es posible crear un nuevo objeto con
new self y new parent.
Cuando se asigna una instancia ya creada de una clase a una nueva variable, ésta última
accederá a la misma instancia que el objeto que le fue asignado. Esta
conducta es la misma que cuando se pasan instancias a una función. Se puede
realizar una copia de un objeto ya creado a través de la
clonación del mismo.
Ejemplo #4 Asignación de objetos
$instancia= newClaseSencilla();$asignada=$instancia;$referencia=&$instancia;$instancia->var='$asignada tendrá este valor';$instancia=null;// $instancia y $referencia son nullvar_dump($instancia);var_dump($referencia);var_dump($asignada);?>
El resultado del ejemplo sería:
NULL
NULL
object(ClaseSencilla)#1 (1) {
["var"]=>
string(27) "$asignada tendrá este valor"
}
Existe un par de formas de crear instancias de un objecto:
Ejemplo #5 Creación de nuevos objetos
static public functiongetNew()
{
return new static;
}
}
classHijaextendsPrueba{}$obj1= newPrueba();$obj2= new$obj1;var_dump($obj1!==$obj2);$obj3=Prueba::getNew();var_dump($obj3instanceofPrueba);$obj4=Hija::getNew();var_dump($obj4instanceofHija);?>
El resultado del ejemplo sería:
bool(true)
bool(true)
bool(true)
Es posible acceder a un miembro de un objeto recién creado en
una única expresión:
Ejemplo #6 Acceder a un mimebro de un objeto recién creado
<?phpecho (newDateTime())->format('Y');?>
El resultado del ejemplo
sería algo similar a:
2016
Nota:
Antes de PHP 7.1, los argumentos no se evalúan si no hay una
función constructora definida.