| 
<?php
 /**
 * JAVA Autoboxing (part of Lotos Framework)
 *
 * Copyright (c) 2005-2010 Artur Graniszewski ([email protected])
 * All rights reserved.
 *
 * @category   Library
 * @package    Lotos
 * @subpackage DataTypes
 * @copyright  Copyright (c) 2005-2010 Artur Graniszewski ([email protected])
 * @license    GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007
 * @version    $Id$
 */
 
 
 // load required library
 include("./variablesManager.php");
 
 // and an example classes
 include("./autoboxExampleClasses.php");
 
 
 // create a new String object (see autoboxExampleClass.php for class definition)
 $text = & string("Initial text");
 
 echo 'The initial value of $text variable is "'.$text.'"<br />';
 echo 'The initial datatype of $text variable is '.gettype($text).(is_object($text) ? ' ('.get_class($text).')': '').'<br />';
 
 // ------------------------
 echo "<hr />";
 
 echo 'Now we are changing $text value to 12 (integer)<br />';
 
 // now try to change the data type to PHP Integer:
 $text = 12;
 
 // from this moment $text should be an integer and not a String object (this is a default PHP behaviour),
 // but thanks to our autoboxing, this isn't true. $text is still an object
 echo 'The new value of $text variable is "'.$text.'"<br />';
 echo 'The new datatype of $text variable is '.gettype($text).(is_object($text) ? ' ('.get_class($text).')': '').'<br />';
 
 // ------------------------
 echo "<hr />";
 
 echo 'Now we are changing $text value to "autoboxing test" (plain PHP string)<br />';
 
 // now try to change the data type to PHP plain string (not an object)::
 $text = "autoboxing test";
 
 // from this moment $text should become a plain string and not a String object (this is a default PHP behaviour),
 // but thanks to our autoboxing, this isn't true. $text is still an object
 echo 'The new value of $text variable is "'.$text.'"<br />';
 
 // NOTE: now we are operating on $text like on any other object (using $text->toUpperCase()) - just like in JAVA anc C#
 // without enabled autoboxing PHP would raise a FATAL ERROR in the next line of code:
 echo 'The new uppercased value of $text variable is "'.$text->toUpperCase().'"<br />';
 echo 'The new datatype of $text variable is '.gettype($text).(is_object($text) ? ' ('.get_class($text).')': '').'<br />';
 
 // ------------------------
 echo "<hr />";
 
 echo 'The next test is to create new String object and overwrite last one with the new one<br />';
 
 // now try to change the data type to another String object
 $text = & string("New text object");
 
 echo 'The new value of $text variable is "'.$text.'"<br />';
 
 // NOTE: now we are operating on $text like on any other object (using $text->toUpperCase()) - just like in JAVA anc C#
 echo 'The new uppercased value of $text variable is "'.$text->toUpperCase().'"<br />';
 echo 'The new datatype of $text variable is '.gettype($text).(is_object($text) ? ' ('.get_class($text).')': '').'<br />';
 
 
 // ------------------------
 echo "<hr />";
 
 echo 'This time we are overwritting $text with an object of the different type (other than String class)<br />';
 
 // now try to change the data type to stdClass object
 $text = new stdClass();
 
 echo 'The new datatype of $text variable is '.gettype($text).(is_object($text) ? ' ('.get_class($text).')': '').'<br />';
 
 echo 'Ofcourse unset() works also, autoboxed objects can be destroyed or overriden at any time by the PHP developer just like in a plain old PHP';
 
 
 // ------------------------
 echo "<hr />";
 
 echo 'And finally some technical info from Lotos Variables Manager (used by autoboxing caching mechanism)<br />';
 
 // now try some caching...
 $text = & cachedString("test");
 $text2 = & cachedString("test2");
 $text3 = & cachedString("lorem ipsum");
 $text4 = & cachedString("lorem ipsum");
 $text5 = & cachedString("lorem ipsum");
 
 echo '<pre>';
 echo '<pre>After creating 2 unique texts and 3 copies of "lorem ipsum":<br />';
 print_r(VariablesManager::getPoolUsage());
 echo '</pre>';
 
 
 
 
 echo '<pre>After deletion of $text5:<br />';
 $text5 = "";
 print_r(VariablesManager::getPoolUsage());
 echo '</pre>';
 
 echo '<pre>After deletion of $text4 and $text3:<br />';
 $text4 = "";
 $text3 = "";
 print_r(VariablesManager::getPoolUsage());
 echo '</pre>';
 
 
 echo "<hr>";
 
 
 |