[Solved] Time display function not working


The line:

$this->display = " $this->n"."$this->suf"." $this->name";

is the first line of the class’ constructor. It stores in the $display property of the object a string that contains only spaces because the values it contains are not set yet.

Read about double-quotes strings and variables parsing inside double-quotes strings.

In order to work, the class time_value should be like this:

class time_value
{
    private $t, $name, $display;

    public function __construct($t, $name)
    {
        $this->t = $t;
        $this->name = $name;

        $n = date($this->t, time());
        switch ($n)
        {
            case 1:
                $suf="st";
                break;
            case 2:
                $suf="nd";
                break;
            case 3:
                $suf="rd";
                break;
            default:
                $suf="th";
                break; 
        }

        $this->display = " {$n}{$suf} {$this->name}";
    }

    public function display() { return $this->display; }
}

$sec = new time_value('s', 'seconds');
$min = new time_value('i', 'minutes');
// all the other time components here...

echo $sec->display().$o.$min->display(); // ...

The next step toward object-oriented programming is to encapsulate the generation of all time components into the time_value class (or into another class that uses time_value instances, if you like it more) and have the code of function say_time() look like this:

function say_time()
{
    $time = new time_value();
    echo "You are, at this moment, living in the ".$time->display("of the")." since the begining of the International calender.";
}

solved Time display function not working