<?php
  
require('lang.base.php');
  
uses('lang.Collection','util.Date');
  
  class 
Figure extends Object { }
  class 
Rectangle extends Figure { }
  class 
Circle extends Figure { }

  echo 
"\n****************************** Null ******************************\n";
  echo 
'===> cast(NULL, string): ';
  
var_dump(cast(NULL'string'));
  echo 
'===> cast(NULL, int): ';
  
var_dump(cast(NULL'int'));
  echo 
'===> cast(NULL, float): ';
  
var_dump(cast(NULL'float'));
  echo 
'===> cast(NULL, boolean): ';
  
var_dump(cast(NULL'boolean'));
  echo 
'===> cast(NULL, array): ';
  
var_dump(cast(NULL'array'));
  echo 
'===> cast(NULL, lang.Object): ';
  
var_dump(cast(NULL'lang.Object'));

  echo 
"\n**************************** Primitives ***************************\n";
  echo 
'===> cast(1, string): ';
  
var_dump(cast(1'string'));
  echo 
'===> cast(1.0, string): ';
  
var_dump(cast(1.0'string'));
  echo 
'===> cast(TRUE, string): ';
  
var_dump(cast(TRUE'string'));
  echo 
'===> cast(new Circle(), string): ';
  
var_dump(cast(new Circle(), 'string'));

  echo 
'===> cast("10", int): ';
  
var_dump(cast('10''int'));
  echo 
'===> cast(2.7, int): ';
  
var_dump(cast(2.7'int'));
  echo 
'===> cast(TRUE, int): ';
  
var_dump(cast(TRUE'int'));
  echo 
'===> cast(new Circle(), boolean): ';
  try(); {
    
cast(new Circle(), 'int');
  } if (catch(
'InvalidCastException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }

  echo 
'===> cast("10", float): ';
  
var_dump(cast('10''float'));
  echo 
'===> cast(2, float): ';
  
var_dump(cast(2'float')); 
  echo 
'===> cast(TRUE, float): ';
  
var_dump(cast(TRUE'float'));
  echo 
'===> cast(new Circle(), boolean): ';
  try(); {
    
cast(new Circle(), 'float');
  } if (catch(
'InvalidCastException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }

  echo 
'===> cast(1, boolean): ';
  
var_dump(cast(1'boolean'));  
  echo 
'===> cast(1.0, boolean): ';
  
var_dump(cast(1.0'boolean'));
  echo 
'===> cast("", boolean): ';
  
var_dump(cast('''boolean')); 
  echo 
'===> cast(new Circle(), boolean): ';
  try(); {
    
cast(new Circle(), 'boolean');
  } if (catch(
'InvalidCastException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }

  echo 
"\n****************************** Arrays *****************************\n";
  echo 
'===> cast("Hello", array): ';
  
var_dump(cast('Hello''array'));
  echo 
'===> cast(1.2, array): ';
  
var_dump(cast(1.2'array'));
  echo 
'===> cast(89, array): ';
  
var_dump(cast(89'array'));  
  echo 
'===> cast(TRUE, array): ';
  
var_dump(cast(TRUE'array'));
  
$collection= &Collection::forClass('Figure');
  
$collection->add(new Figure());
  echo 
'===> cast($collection, array): ';
  
var_dump(cast($collection'array'));
  echo 
'===> cast(new Object(), array): ';
  
var_dump(cast(new Object(), 'array'));
  echo 
'===> cast(array(1, 2, 3), int): ';
  try(); {
    
cast(array(123), 'int');
  } if (catch(
'InvalidCastException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }
  echo 
'===> cast(array(_utime => 1101158157), Date): ';
  
var_dump(cast(array('_utime' => 1101158157), 'Date'));
 
  echo 
"\n***************************** Objects *****************************\n";
  echo 
'===> cast(new Figure(), Circle): ';
  
var_dump(cast(new Figure(), 'Circle'));
  echo 
'===> cast(new Circle(), Figure): ';
  
var_dump(cast(new Circle(), 'Figure'));  
  echo 
'===> cast(new Circle(), Rectangle): ';
  try(); {
    
cast(new Circle(), 'Rectangle');
  } if (catch(
'ClassCastException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }
  echo 
'===> cast(new Circle(), FooBar): ';
  try(); {
    
cast(new Circle(), 'FooBar');
  } if (catch(
'ClassNotFoundException'$e)) {
    echo 
'*** '$e->getClassName(), ': '$e->getMessage(), " ***\n";
  }
?>