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.
  
   Class members must be defined with public, private, or protected.
   
    
| Example 19-10. 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 $obj->public; // Works
 echo $obj2->private; // Undefined
 echo $obj2->protected; // Fatal Error
 $obj2->printHello(); // Shows Public, Protected2, not Private
 
 ?>
 | 
 | 
   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.
    
    Class methods must be defined with public, private, or protected. Methods
    without any declaration are defined as public.
   
    
| Example 19-11. Method Declaration | 
<?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
 ?>
 | 
 |