In the previous tutorial, we learned to use the \$this keyword to approach properties and methods within the scope of the class. In this tutorial we will learn that, when a class’s methods return the \$this keyword, they can be chained together to create much more streaming code.
For instance, in our Car class, let’s say that we want to measure how much fuel we have in our car’s tank. The amount of fuel in the tank is dependent upon the number of miles we have driven in our car, as well as the amount of fuel that we put in the tank.
In order to achieve our goal, we are going to put a public property \$tank to our class that represents the number of gallons of fuel that we have in the car’s tank.

```class Car {
public \$tank;
}

We must also add two methods to our Car class:
1. The fill() method adds gallons of fuel to our car’s tank.
2. The ride() method calculates how much fuel we consume when we ride a certain distance, and then subtracts it from the tank. In our example, we assume that the car consumes 1 gallon of fuel every 50 miles.

```
```class Car {
public \$tank;
// Add gallons of fuel to the tank when we fill it
public function fill(\$float)
{
\$this-> tank += \$float;
}
// Subtract gallons of fuel from the tank as we ride the car
public function ride(\$float)
{
\$miles = \$float;
\$gallons = \$miles/50;
\$this-> tank -= \$gallons;
}
}```

As we would like our code to look elegant, we will chain the methods and properties. Note the arrows in the code.

`\$tank = \$car -> fill(10) -> ride(40) -> tank;`

In words: How much fuel do we have left in our tank after putting in 10 gallons, and driving 40 miles?
In order to perform the chaining, the methods should return the \$this keyword.
In order for us to be able to perform the chaining, the methods should return the object and, since we are inside the class, the methods should return the \$this keyword. In the code below, we can see how each method returns the \$this keyword in order to allow the chaining.

```class Car {
public \$tank;
// Add gallons of fuel to the tank when we fill it
public function fill(\$float)
{
\$this-> tank += \$float;
return \$this;
}
// Subtract gallons of fuel from the tank as we ride the car
public function ride(\$float)
{
\$miles = \$float;
\$gallons = \$miles/50;
\$this-> tank -= \$gallons;
return \$this;
}
}```

Now, we can create an object from the Car class with the name of \$bmw and find out the number of gallons of fuel left in our car’s tank after we have filled the tank with 10 gallons of fuel and driven40 miles.

```// Create an object from the Car class
\$bmw = new Car();
// Add 10 gallons of fuel, then ride 40 miles
// and get the number of gallons in the tank
\$tank = \$bmw -> fill(10) -> ride(40) -> tank;
// Print the results to the screen
echo "The number of gallons left in the tank: " . \$tank . " gal.";```

Result:
The number of gallons left in the tank: 9.2 gal. #### Anuj Kumar

This is Anuj Kumar. I’m a professional web developer with 4+ year experience. I write blogs in my free time. I love to learn new technologies and share with others.
I founded PHPGurukul in September 2015. The main aim of this website to provide PHP, Jquery, MySQL, PHP Oops and other web development tutorials.
.