Php OOP Part-2
Published: 2021-03-17 16:53:12

It is a sequel to my [PHP OOP Part-1](https://dev.to/tanzimibthesam/oop-php-part-1-3bo5).Here I am going to talk about parent constructor, static classes, method overriding, abstract classes 
***1-Parent Constructor***
```
<?php 
 class Student{
     public $age;
     public $name;

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


     }
     public function profile()
     {
         # code...
         echo "His name is {$this->name} and age is {$this->age}";
     }
 }

```
Here we take 2 class and have 2 properties assign the value in constructor and echo them in profile method.
Then we 
```
 class Adminstration extends Student{
     public $grade;

     public function __construct($name,$age,$grade){
         $this->grade=$grade;
        
         parent::__construct($name,$age);


     }
     public function profile()
     {
     echo "His name is {$this->name} and age is {$this->age} and 
 grade is {$this->grade}";
     }



 }

$admin=new Adminstration("Tanzim",25,4);
$admin-> adminprofile();
```
Here we see we extend the student class with Administration class in Administration class we assign a new property $grade and then inside construct method we make use of parent::construct to access properties inside constructor method of Student which is parent class here.
2.Static Classes 
```
<?php 



class Student{
    public static $age=15;

    public static function profile(){
        echo "His age is ".self::$age;
    }

}

echo Student::$age;
echo Student::profile();



?>
```
Static properties and methods are what we can access without instantiating classes like here age is a static property and profile is a static function. 
We can just access property just by ``` echo Student::$age;```
```
 public static function profile(){
        echo "His age is ".self::$age;
    }
echo Student::profile();
```
To access any property inside a static function we need to use self keyword.
```
<?php 
 class Student{
     public $age;
     public $name;

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


     }
     public function profile()
     {
         # code...
         echo "His name is {$this->name} and age is {$this->age}";
     }
 }

 class Adminstration extends Student{
     public $grade;

     public function __construct($name,$age,$grade){
         $this->grade=$grade;
        
         parent::__construct($name,$age);


     }
     public function profile()
     {
         # code...
         echo "His name is {$this->name} and age is {$this->age} and grade is {$this->grade}";
     }



 }

$admin=new Adminstration("Tanzim",25,4);
$admin-> adminprofile();

```
**Method Overriding**
When we extend the parent class to inherit properties and methods if we instantiate the children class which extends the parent class and both parent class and child class or inherited class have method with same name than the class overrides the method of parent class and replaces it with same method name child class 

```
<?php 

class Student{
    public function profile(){
        echo "Profile from student class";
        
    }
    
}

class Adminstration extends Student{
    // public function profile(){
    //     echo "Profile from adminstration class";
        
    // }


}
$stu=new Student;

// $stu->profile();
$admin=new Adminstration;
$admin->profile();
```
Here we see class Administration which is the child class which inherits properties and methods of parent class here we see when we instantiate the child class Administration and point out the method profile it gives us methods of parent class
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b8em8ry1kdj602rm7m7p.png)
Then if we write a class
```
<?php 

class Student{
    public function profile(){
        echo "Profile from student class";
        
    }
    
}

class Adminstration extends Student{
    public function profile(){
        echo "Profile from adminstration class";
        
    }


}
$stu=new Student;


$admin=new Adminstration;
$admin->profile();
```
Here if we see that Adminstration which is child class extending parent class and here both child and parent class have the same method named profile.In this case this is the output we get.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pwai2zbmfdboscxixpcq.png)
Here we see the method in child class overrides properties in parent class we get the property from child class
**Abstract Classes**
Abstract classes are classes which can only be used  when another class extends it 
```
<?php 

abstract class Student{
    public function profile(){
        echo "Profile";
    }
}


$tech=new Student;

$tech->profile();
?>
```
Here if we just we instantiate the class we get this error
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqygxdgnqmf1wy8a68am.png)
But if we write 
```
<?php 

abstract class Student{
    public function profile(){
        echo "Profile";
    }
}

class Teacher extends Student{
   
}
$tech=new Student;

$tech->profile();

?>
```
Here if we extend the class and instantiate the child class we can get access to the parent class.We will get profile printed from parent class
So its part 2 of php oop hopefully in next part we will discuss some concepts such as Interface,traits etc