Core PHP

Debugging Variables

This PHP program demonstrates how to print debugging values with specialized functions and variables.

DebuggingVariables.php

<!DOCTYPE html>
<html>
  <head>
    <title>XoaX.net PHP</title>
  </head>
  <body>
<?php

// Define a simple interface.
interface IShape
{
	public function GetArea();
}

// Define an interface that extends the other one.
interface INamedShape extends IShape
{
	public function GetName();
}

// Define an abstract polygon class.
abstract class CAPolygon implements INamedShape
{
	public $mdaSideLengths = [];

	public function __construct($daSidesLengths) {
		foreach ($daSidesLengths as $dSide) {
			array_push($this->mdaSideLengths, $dSide);
		}
	}

	public function GetName() {
		return "Polygon";
	}
}

// Define a simple triangle class that extends polygon.
class CTriangle extends CAPolygon
{
	public function __construct($daSidesLengths) {
		// This will ensure that the polygon only has three sides
		parent::__construct(array($daSidesLengths[0], $daSidesLengths[1], $daSidesLengths[2]));
	}

	public function GetArea() {
		$dSemiPerimeter = 0.0;
		for ($i = 0; $i < 3; ++$i) {
			$dSemiPerimeter += $this->mdaSideLengths[$i];
		}
		$dSemiPerimeter /= 2;
		$dArea = $dSemiPerimeter;
		for ($i = 0; $i < 3; ++$i) {
			$dArea *= ($dSemiPerimeter - $this->mdaSideLengths[$i]);
		}
		$dArea = sqrt($dArea);
		return $dArea;
	}

	public function PrintBackTrace() {
		debug_print_backtrace();
	}

	public function PrintVarsInScope() {
		echo '<pre>';
		print_r(get_defined_vars());
		echo '</pre>';
	}

	public function PrintDebugBackTrace() {
		echo '<pre>';
		// print_r(debug_backtrace()) is the same as debug_print_backtrace();
		print_r(debug_backtrace());
		echo '</pre>';
	}
}

// Declare and allocate an array and a triangle object.
$daSideLengths = [ 1.0, 1.0, 1.0];
$qTriangle = new CTriangle($daSideLengths);

// Call the triangle methods and print the results.
echo "<ul><strong>Methods</strong>";
echo "<li>Triangle Name = ".$qTriangle->GetName()."</li>";
echo "<li>Triangle Area = ".$qTriangle->GetArea()."</li>";
echo "</ul>";

// Check the types of a string, double, array, and a triangle.
echo "<ul><strong>Types</strong>";
echo "<li>Triangle Name = ".gettype($qTriangle->GetName())."</li>";
echo "<li>Triangle Area = ".gettype($qTriangle->GetArea())."</li>";
echo "<li>Triangle mdaSideLengths = ".gettype($qTriangle->mdaSideLengths)."</li>";
echo "<li>Triangle = ".gettype($qTriangle)."</li>";
echo "</ul>";

// Check the classes of a string, double, array, and a triangle.
echo "<ul><strong>Classes</strong>";
echo "<li>Triangle Name = ".get_class($qTriangle->GetName())."</li>";
echo "<li>Triangle Area = ".get_class($qTriangle->GetArea())."</li>";
echo "<li>Triangle mdaSideLengths = ".get_class($qTriangle->mdaSideLengths)."</li>";
echo "<li>Triangle = ".get_class($qTriangle)."</li>";
echo "</ul>";

// Create a variable name for the array of all defind variables.
$qAllVars = get_defined_vars();

// Call print_r() on all of the variables.
echo "<ul><strong>print_r</strong><br/><br />";
echo "<li>Triangle Name = ".print_r($qTriangle->GetName())."</li><br/>";
echo "<li>Triangle Area = ".print_r($qTriangle->GetArea())."</li><br/>";
echo "<li>Triangle mdaSideLengths = ".print_r($qTriangle->mdaSideLengths)."</li><br/>";
echo "<li>Triangle = ".print_r($qTriangle)."</li><br/>";
echo "<li>AllVars = ".print_r($qAllVars)."</li><br/>";
echo "</ul>";

// Call var_dump() on all of the variables.
echo "<ul><strong>var_dump</strong><br/><br />";
echo "<li>Triangle Name = ".var_dump($qTriangle->GetName())."</li><br/>";
echo "<li>Triangle Area = ".var_dump($qTriangle->GetArea())."</li><br/>";
echo "<li>Triangle mdaSideLengths = ".var_dump($qTriangle->mdaSideLengths)."</li><br/>";
echo "<li>Triangle = ".var_dump($qTriangle)."</li><br/>";
echo "<li>AllVars = ".var_dump($qAllVars)."</li><br/>";
echo "</ul>";

// Call var_export() on all of the variables.
echo "<ul><strong>var_export</strong><br/><br />";
echo "<li>Triangle Name = ".var_export($qTriangle->GetName(), true)."</li><br/>";
echo "<li>Triangle Area = ".var_export($qTriangle->GetArea(), true)."</li><br/>";
echo "<li>Triangle mdaSideLengths = ".var_export($qTriangle->mdaSideLengths, true)."</li><br/>";
echo "<li>Triangle = ".var_export($qTriangle, true)."</li><br/>";
echo "<li>AllVars = ".var_export($qAllVars, true)."</li><br/>";
echo "</ul>";

// Call debug_zval_dump() on all of the variables.
echo "<ul><strong>debug_zval_dump </strong><br/><br />";
echo "<li>Triangle Name = ".debug_zval_dump($qTriangle->GetName())."</li><br/>";
echo "<li>Triangle Area = ".debug_zval_dump($qTriangle->GetArea())."</li><br/>";
echo "<li>Triangle mdaSideLengths = ".debug_zval_dump($qTriangle->mdaSideLengths)."</li><br/>";
echo "<li>Triangle = ".debug_zval_dump($qTriangle)."</li><br/>";
echo "<li>AllVars = ".debug_zval_dump($qAllVars)."</li><br/>";
echo "</ul>";

$qTriangle->PrintBackTrace();
echo "<br /><br />";

// Call print_r() and format it with a pre element.
echo "<strong>Defined Variables</strong>";
echo '<pre>';
print_r(get_defined_vars());
echo '</pre>';

// There are no variables inside the function scope.
// So, this array is empty.
echo "<strong>Scoped Defined Variables</strong>";
$qTriangle->PrintVarsInScope();

echo "<strong>Debug Backtrace</strong>";
$qTriangle->PrintDebugBackTrace()
?>

  </body>
</html>
 
 

Output

 
 

© 2007–2024 XoaX.net LLC. All rights reserved.