When storing an object in $_SESSION trying to retrieve it in another page we will get an error if the class itself is not available when the session_start() function builds the $_SESSION array. Debugging the $_SESSION we will find that our object is available and is stored as a __PHP_Incomplete_Class object. In order to avoid this problem we better make sure that the class definition is available before we call the session_start() function by calling the require_once\require\include_once\include for getting the class definition in advance (before we call the session_start() function). Getting __PHP_Incomplete_Class object can happen in other similar scenarios, such as when calling the unserialize() function while the class definition is not available.
The following video clip uses a code sample composed of three files in order to demonstrate getting a __PHP_Incomplete_Class object.
The Rectangle.php file includes the definition for the Rectangle class.
<?php
class Rectangle
{
private $width;
private $height;
function __construct($hVal,$wVal)
{
$this->setHeight($hVal);
$this->setWidth($wVal);
}
public function setHeight($height)
{
if($height>0)
{
$this->height = $height;
}
}
public function getHeight()
{
return $this->height;
}
public function setWidth($width)
{
if($width>0)
{
$this->width = $width;
}
}
public function getWidth()
{
return $this->width;
}
}
?>
The first.php file instantiates Rectangle and stores the new object into the $_SESSION super global array.
<?php include_once 'Rectangle.php'; session_start(); $ob = new Rectangle(4,3); $_SESSION['rec'] = $ob; ?> <a href='second.php'>second</a>
The second.php file retrieves the Rectangle object back from the $_SESSION super global array and calls various functions on it.
<?php require_once 'Rectangle.php'; session_start(); var_dump($_SESSION); $temp = $_SESSION['rec']; $width = $temp->getWidth(); $height = $temp->getHeight(); echo 'width='.$width.' height='.$height; ?>







