La visibilidad de una propiedad o método puede ser definida al anteponerle a la declaración con las palabras reservadas: public, protected o private. Los elementos declarados con Public pueden ser accesados en todos lados. Los Protected limitan el acceso a las clases heredadas (y a la clase que define el elemento). Los Private limitan la visibilidad solo a la clase que lo definió.
Los miembros de la clase debe estar definidos con public, private o protected.
Ejemplo 19-8. Declaración de miembros
<?php/** * Define MyClass */class MyClass{ public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // Worksecho $obj->protected; // Fatal Errorecho $obj->private; // Fatal Error$obj->printHello(); // Shows Public, Protected and Private
/** * Define MyClass2 */class MyClass2 extends MyClass{ // We can redeclare the public and protected method, but not private protected $protected = 'Protected2';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj->public; // Worksecho $obj2->private; // Undefinedecho $obj2->protected; // Fatal Error$obj2->printHello(); // Shows Public, Protected2, not Private ?> |
|
Nota: La forma de declarar una variable en PHP 4 con la palabra reservada var ya no es válida para los objetos de a partir de PHP 5. Por compatibilidad una variable declarada en php se asumirá con visibilidad pública, y se emitirá una advertencia E_STRICT.
Los métodos de clase deben ser definidos con public, private o protected. Los métodos sin ninguna declaración son tomados como public.
Ejemplo 19-9. Declaración de métodos
<?php/** * Define MyClass */class MyClass{ // Contructors must be public public function __construct() { }
// Declare a public method public function MyPublic() { }
// Declare a protected method protected function MyProtected() { }
// Declare a private method private function MyPrivate() { }
// This is public function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass;$myclass->MyPublic(); // Works$myclass->MyProtected(); // Fatal Error$myclass->MyPrivate(); // Fatal Error$myclass->Foo(); // Public, Protected and Private work
/** * Define MyClass2 */class MyClass2 extends MyClass{ // This is public function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // Fatal Error } } $myclass2 = new MyClass2;$myclass2->MyPublic(); // Works$myclass2->Foo2(); // Public and Protected work, not Private?> |
|
No response to “Visibilidad”
Publicar un comentario