2010-02-04 31 views
14

¿Cómo declaras una propiedad de clase como un objeto?declarar propiedad como objeto?

me trataron:

public $objectname = new $Object(); 

Pero no funcionó. Además, ¿por qué deberías hacerlo así?

¿No es mejor simplemente crear una instancia de ese objeto y simplemente usar sus miembros?

Respuesta

24

Desde el (el énfasis es mío) PHP manual on class properties:

Las variables de miembro de clase se llaman "propiedades". También puede verlos referidos al uso de otros términos como "atributos" o "campos", pero a los fines de esta referencia utilizaremos "propiedades". Se definen utilizando una de las palabras clave public, protected o private, seguida de una declaración de variable normal. Esta declaración puede incluir una inicialización, pero esta inicialización debe ser un valor constante, es decir, debe poder evaluarse en tiempo de compilación y no debe depender de la información del tiempo de ejecución para poder evaluarse.

bien crear en el interior del constructor (composition)

class Foo 
{ 
    protected $bar; 
    public function __construct() 
    { 
     $this->bar = new Bar; 
    } 
} 

o inject en el constructor (aggregation)

class Foo 
{ 
    protected $bar; 
    public function __construct(Bar $bar) 
    { 
     $this->bar = $bar; 
    } 
} 

o utilizar la inyección de setter.

class Foo 
{ 
    protected $bar; 
    public function setBar(Bar $bar) 
    { 
     $this->bar = $bar 
    } 
} 

Quiere favor aggregation over composition.

+2

La agregación también se conoce como "Inyección de dependencias" y Fabien Potencier tiene un tutorial aquí: http://fabien.potencier.org/article/11/what-is-dependency-injection –

1

PHP no admite el tipado explícito de los miembros de la clase. Por lo tanto no se puede decir:

public Object $objectname; 

Si la clase Object existe, y desea que una instancia del mismo, trate de:

public $objectname = new Object(); 
+2

Esto producirá un error fatal, "La expresión constante contiene operaciones no válidas" – hassan

1

Si usted está buscando para crear una instancia de una clase genérica que puede hacer:

$objectname = new stdClass; 

no creo que usted puede hacer esto en la declaración de una propiedad por lo que tendría que acaba de declarar $ objectname y en el constructor establecerlo en stdClass nuevo.

Cuestiones relacionadas