BlaBla.cn

Visibility


Visibility

The visibility of a property or method can be defined by prefixing the declaration with the keywords: public, protected or private. Public declared items can be accessed everywhere. Protected limits access to inherited and parent classes (and to the class that defines the item). Private limits visibility only to the class that defines the item.

Members Visibility

Class members must be defined with public, private, or protected.

Example #1 Member declaration

<?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 
$obj2 -> public // Works
echo  $obj2 -> private // Undefined
echo  $obj2 -> protected // Fatal Error
$obj2 -> printHello ();  // Shows Public, Protected2, Undefined

?>

Note: The PHP 4 method of declaring a variable with the var keyword is still supported for compatibility reasons (as a synonym for the public keyword). In PHP 5 before 5.1.3, its usage would generate an E_STRICT warning.

Method Visibility

Class methods must be defined with public, private, or protected. Methods without any declaration are defined as public.

Example #2 Method Declaration

<?php
/**
 * Define MyClass
 */
class  MyClass
{
    
// Declare a public constructor
    
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

class  Bar 
{
    public function 
test () {
        
$this -> testPrivate ();
        
$this -> testPublic ();
    }

    public function 
testPublic () {
        echo 
"Bar::testPublic\n" ;
    }
    
    private function 
testPrivate () {
        echo 
"Bar::testPrivate\n" ;
    }
}

class 
Foo  extends  Bar 
{
    public function 
testPublic () {
        echo 
"Foo::testPublic\n" ;
    }
    
    private function 
testPrivate () {
        echo 
"Foo::testPrivate\n" ;
    }
}

$myFoo  = new  foo ();
$myFoo -> test ();  // Bar::testPrivate 
                // Foo::testPublic
?>


 
BlaBla.cn

© 2005-2008 BlaBla.cn 版权所有