En PHP 4, no habia restricción en cuanto al acceso de los miembros (variables y métodos) de un objeto.
En PHP 5, el acceso a propiedades se puede definir explicitamente usando las palabras clave: private, public, y protected cuando se declaran variables y métodos.
<?php
    
class Animal {
        private 
$id// accesible solo por una instancia
        
protected $tipo// accesible por instancias y subclases
        
public $nombre// accesible en cualquier contexto
        
        
function __construct($id$tipo) {
            
$this->asignarID($id);
            
$this->asignarTipo($tipo);
        }

        public function 
asignarID($id) { 
            if (
$this->verificarID($id)) {
                
$this->id $id;
            }
        }
        protected function 
asignarTipo($tipo) { 
            
$this->tipo $tipo;
        }
        private function 
verificarID($id) { 
            return 
is_numeric($id);
        }
    }

    class 
Iguana extends Animal {
        function 
__construct($nombre) {
            
$this->asignarTipo('reptil');
            
$this->nombre $nombre;
        } 
    }

    
$loro = new Animal(1'ave');
    
$loro->nombre 'silencioso';  // no hay problema
    
$loro->verificarID(); // genera un error, metodo privado
    
    
$verde = new Iguana('verde');
    echo 
$verde->tipo// genera un error, propiedad protegida
?>
el ejecutar el código, produce:
Fatal error: Call to private 
method Animal::verificarID() 
from context '' noob.php on line 34