Ejemplos __get y __set y herencia

<?php

class Empleado {

private $nombre;
 private $sueldo;

function __construct($nombre, $sueldo) {
 $this->nombre = $nombre;
 }

function paga() {
 return $this->sueldo / 12;
 }

public function __get($propiedad) {
 if (property_exists($this, $propiedad)) {
 return $this->$propiedad;
 } else {
 throw new Exception("No existe la propiedad");
 }
 }

public function __set($property, $value) {
 if (property_exists($this, $property)) {
 if ($property == "sueldo") {
 if ($value > 600) {
 $this->sueldo = $value;
 } else {
 throw new Exception("Sueldo debe ser > 600");
 }
 } elseif (!empty($value)) {
 $this->$property = $value;
 }
 }
 }

}

class comercial extends empleado {

private $comision = .1;
 protected $ventas;

public function __construct($nombre, $sueldo, $ventas) {
 parent::__construct($nombre, $sueldo);
 $this->ventas = $ventas;
 }

function paga() {
 $p = parent::paga();
 return $p + $this->ventas * $this->comision / 12;
 }

}

index.php

$juan = new Empleado("Juan", 300);
        $p=new comercial("Juasdan", 300,9000);
        echo $p->nombre;
        echo $p->paga();
        try {
            $juan->sueldo = 6000;
            echo $juan->sueldo;
            echo $juan->paga();
        } catch (Exception $error) {
            echo $error->getMessage();
        }