Visibilidad

La visibilidad de una propiedad o método puede ser defionida 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 alas clase que define el elemento). los Private limitan la visibilidad solo a la clase que lo definió.

Visibilidad de los miembros

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; // Works
echo $obj->protected; // Fatal Error
echo $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; // Works
echo $obj2->private; // Undefined
echo $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 PHP 5. Por compatibilidad un variable declarada en php se asumirá con visibilidad pública, y una se emitirá una advertencia E_STRICT.

Visibilidad de los métodos

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
?>

Hosting by: hurra.com
Generated: 2007-01-26 18:01:09