Visibilidad

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.

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

No response to “Visibilidad”