Hello, I've been trying to think of a way to dynamically return property values for a class using __call instead of creating a slew of functions whose only purpose would be to return those values. The idea I have is to be able to request ( for example ) $this->fetch_PersonFirstName() and have the class check if $this->person["first_name"] is set and return the value. Another example would be calling $this->fetch_BookGenreTitle() and have the class return the value of $this->book["genre"]["title"]. I know something like this would have to do a bit of checking in order for it to automatically determine that, for example, since $this->book["genre_title"] doesn't exist, then it should check for $this->book["genre"]["title"].
So far I've come up with code that ( for some reason ) works for returning the values of an array ( such as my person example ) but my problem quickly develops when I try to return the values of a multidimensional array ( such as with my above book example ). Bare in mind, I'm still trying to think of a way for the __call method to check for the existence of one, and if it doesn't exist, then the other.
Please, throw me a line here. I've been banging my head against the wall trying to figure this out and it's killing me.
<?php
class Test
{
    protected $person;
    protected $book;
    public function __construct()
    {
        $this->person["first_name"] = "John Smith";
        $this->book["genre"]["title"] = "Suspense";
    }
    public function __call($method, $args)
    {
        $args = implode(", ", $args);
        if (preg_match("/^fetch_([A-Z]{1,}[a-z]{1,})(.*)?/", $method, $match))
        {
            print_r($match);
            echo "<br><br>";
            $property   = strtolower($match[1]);
            $indexes    = $match[2];
            if (property_exists("Test", $property))
            {
                if ($indexes)
                {
                    $indexes = preg_split("/(?<=[a-z])(?=[A-Z])/", $indexes);
                    $num_indexes    = count($indexes);
                    $count_indexes  = 1;
                    for ($count=0; $count<$num_indexes; $count++)
                    {
                        $record     = strtolower($indexes[$count]);
                        $index .= $record;
                        $array .= "{$record}";
                        $var_index  = $index;
                        $var_array  = $array;
                        echo $var_index." {$count}<br>";
                        echo $var_array." {$count}<br>";
                        //print_r($this->{$property}{$var_array});
                        if ($count_indexes == $num_indexes)
                        {
                            if (isset($this->{$property}{$var_index}))
                            {
                                return $this->{$property}{$var_index};
                            }
                            else
                            {
                                return $this->{$property}{$var_array};
                            }
                        }
                        else
                        {
                            $index .= "_";
                        }
                        $count_indexes++;
                    }
                    echo "<br><br>";
                }
                else
                {
                    return $this->{$property};
                }
            }
        }
    }
}
?>
<?php
    $test = new Test();
    echo $test->fetch_PersonFirstName();
    echo "<br><br>";
    echo $test->fetch_BookGenreTitle();
?>