Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP Object-Oriented PHP Basics (Retired) Inheritance, Interfaces, and Exceptions Final Challenge

Darren Joy
Darren Joy
19,573 Points

Parent child class and syntax

from:

https://teamtreehouse.com/library/final-challenge

This is my code for the challenge

<?php

class Fish
{
    public $common_name;
    public $flavor;
    public $record_weight;

    function __construct($name, $flavor, $record){
        $this->common_name = $name;
        $this->flavor = $flavor;
        $this->record_weight = $record;
    }

    public function getInfo() {
        $output  = "The {$this->common_name} is an awesome fish. ";
        $output .= "It is very {$this->flavor} when eaten. ";
        $output .= "Currently the world record {$this->common_name} weighed {$this->record_weight}.";
        return $output;
    }
}
class Trout extends Fish{
        public $species;
        function __construct($name, $flavor, $record, $species){
        parent::__construct($name, $flavor, $record);
          $this->species = $species;
        }
        public function getInfo() {
        $output  = "The {$this->species} {$this->common_name} tastes {$this->flavor}. ";
        $output .= "the record {$this->species} {$this->common_name} weighs {$this->record_weight} . ";
          return $output; }
};
$brook_trout = new Trout("Trout", "Delicious", "14 pounds 8 ounces", "Brook");
?>

===

Wondering a few things

Why in video they do this kind of thing

" Hello " . $this->hello . " How are you?"

but then in the above code this

" Hello {$this->hello}. How are you?"

Seems either works? Any reasoning behind which is better/used more?

Also for the getInfo part of the challenge,

Can we do a call like parent::getInfo() and what that would look like? I imagine I'd get the same text so I would have to add something to make it worthwhile changing?

fish.php
<?php

class Fish
{
    public $common_name;
    public $flavor;
    public $record_weight;

    function __construct($name, $flavor, $record){
        $this->common_name = $name;
        $this->flavor = $flavor;
        $this->record_weight = $record;
    }

    public function getInfo() {
        $output  = "The {$this->common_name} is an awesome fish. ";
        $output .= "It is very {$this->flavor} when eaten. ";
        $output .= "Currently the world record {$this->common_name} weighed {$this->record_weight}.";
        return $output;
    }
}

?>

1 Answer

Ryan Field
PLUS
Ryan Field
Courses Plus Student 21,242 Points

Hi, Darren.

Both " Hello " . $this->hello . " How are you?" and " Hello {$this->hello}. How are you?", as you have noticed, will output the same thing. The first, using strings and periods is called concatenation, while the second, using curly braces, is called interpolation. In this case they do the same thing, but there are some other cases (which you probably don't need to worry about at the moment) where interpolation is necessary. For simply piecing together strings with variables, though, you can use whichever you prefer.