Jump to content
Larry Ullman's Book Forums

Recommended Posts

I've been banging on the following error for awhile and I cannot tell what is wrong, please help:


Catchable fatal error: Argument 2 passed to ShapeFactory::Create() must be an array, string given, called in /home/content/14/11625314/html/AdvPHPwOOP/factory.php on line 22 and defined in /home/content/14/11625314/html/AdvPHPwOOP/ShapeFactory.php on line 11



I'm using PHP 5.3 thru goDaddy


Here's the code:


<!doctype html>

<html lang="en">
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css">
<?php # Script 7.4 - factory.php
// This page uses the ShapeFactory class (Script 7.2).
// Load the class definitions:
// Minimal validation:
if (isset($_GET['shape'], $_GET['dimensions'])) {
    // Create the new object:
    // Print a little introduction:
    echo "<h2>Creating a {$_GET['shape']}...</h2>";
    // Print the area:
    echo '<p>The area is ' . $obj->getArea() . '</p>';
    // Print the perimeter:
    echo '<p>The perimeter is ' . $obj->getPerimeter() . '</p>';
} else {
    echo '<p class="error">Please provide a shape type and size.</p>';
// Delete the object:
<?php # Script 7.3 - ShapeFactory.php
// This page defines a ShapeFactory class which uses the Factory pattern.
/* The ShapeFactory class.
 * The class contains no attributes.
 * The class contains one method: Create().
abstract class ShapeFactory {
    // Static method that creates objects:
    static function Create($type, array $sizes) {
        // Determine the object type based upon the parameters received.
        switch ($type) {
            case 'rectangle':
                return new Rectangle($sizes[0], $sizes[1]);
            case 'triangle':
                return new Triangle($sizes[0], $sizes[1], $sizes[2]);
        } // End of switch.
    } // End of Create() method.
} // End of ShapeFactory class.
Link to comment
Share on other sites


  • Create New...