ოპერატორი instanceof და მემკვიდრეობა OOP-ში PHP-ში

მოდით გავერკვიეთ მემკვიდრეობის თავისებურებებში ოპერატორის instanceof გამოყენებისას. დავუშვათ, გვაქვს მშობელი კლასი და შვილობილი:

index.php<?php
  // მშობელი კლასი:
  class ParentClass
  {
    
  }
  
  // შვილობილი კლასი:
  class ChildClass extends ParentClass
  {
    
  }
?>

შევქმნათ შვილობილი კლასის ობიექტი:

index.php<?php
  $obj = new ChildClass;
?>

ახლა შევამოწმოთ instanceof-ის დახმარებით, ეკუთვნის თუ არა ჩვენი ობიექტი კლასს ParentClass და კლასს ChildClass:

index.php<?php
  var_dump($obj instanceof ChildClass);  // გამოიტანს true-ს
  var_dump($obj instanceof ParentClass); // ასევე გამოიტანს true-ს
?>

როგორც მაგალითიდან ხედავთ - ოპერატორი instanceof არ აკეთებს განსხვავებას შემოწმებისას მშობელ და შვილობილ კლასებს შორის.

არ დაიბნეთ - თუ ობიექტი ნამდვილად იქნება მშობელი კლასის, მაშინ, რა თქმა უნდა, შემოწმება შვილობილ კლასთან ეკუთვნის თუ არა, დააბრუნებს false-ს:

php<?php
  $obj = new ParentClass; // მშობელი კლასის ობიექტი
  
  var_dump($obj instanceof ParentClass); // გამოიტანს true-ს
  var_dump($obj instanceof ChildClass);  // გამოიტანს false-ს
?>
Задание 1

შექმენით კლასი User პუბლიკური თვისებებით name და surname.

Задание 2

შექმენით კლასი Employee, რომელიც მემკვიდრეობით მიიღებს კლასს User და დაამატებს თვისებას salary.

Задание 3

შექმენით კლასი City პუბლიკური თვისებებით name და population.

Задание 4

შექმენით 3 ობიექტი კლასის User, 3 ობიექტი კლასის Employee, 3 ობიექტი კლასის City, და თვითნებური თანმიმდევრობით ჩაწერეთ ისინი მასივში $arr.

Задание 5

გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ ეკრანზე თვისება name-ის სვეტი იმ ობიექტებისა, რომლებიც ეკუთვნის კლასს User ან ამ კლასის შთამომავალს.

Задание 6

გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ ეკრანზე თვისება name-ის სვეტი იმ ობიექტებისა, რომლებიც არ ეკუთვნის კლასს User ან ამ კლასის შთამომავალს.

Задание 7

გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ ეკრანზე თვისება name-ის სვეტი იმ ობიექტებისა, რომლებიც ეკუთვნის ზუსტად კლასს User, ანუ არა კლასს City და არა კლასს Employee.