ოპერატორი instanceof და მემკვიდრეობა OOP-ში PHP-ში
მოდით გავერკვიეთ მემკვიდრეობის თავისებურებებში ოპერატორის
instanceof გამოყენებისას. დავუშვათ, გვაქვს მშობელი კლასი
და შვილობილი:
<?php
// მშობელი კლასი:
class ParentClass
{
}
// შვილობილი კლასი:
class ChildClass extends ParentClass
{
}
?>
შევქმნათ შვილობილი კლასის ობიექტი:
<?php
$obj = new ChildClass;
?>
ახლა შევამოწმოთ instanceof-ის დახმარებით,
ეკუთვნის თუ არა ჩვენი ობიექტი კლასს ParentClass
და კლასს ChildClass:
<?php
var_dump($obj instanceof ChildClass); // გამოიტანს true-ს
var_dump($obj instanceof ParentClass); // ასევე გამოიტანს true-ს
?>
როგორც მაგალითიდან ხედავთ - ოპერატორი instanceof
არ აკეთებს განსხვავებას შემოწმებისას მშობელ და
შვილობილ კლასებს შორის.
არ დაიბნეთ - თუ ობიექტი ნამდვილად იქნება
მშობელი კლასის, მაშინ, რა თქმა უნდა, შემოწმება
შვილობილ კლასთან ეკუთვნის თუ არა, დააბრუნებს
false-ს:
<?php
$obj = new ParentClass; // მშობელი კლასის ობიექტი
var_dump($obj instanceof ParentClass); // გამოიტანს true-ს
var_dump($obj instanceof ChildClass); // გამოიტანს false-ს
?>
შექმენით კლასი User პუბლიკური თვისებებით
name და surname.
შექმენით კლასი Employee, რომელიც
მემკვიდრეობით მიიღებს კლასს User და დაამატებს
თვისებას salary.
შექმენით კლასი City პუბლიკური თვისებებით
name და population.
შექმენით 3 ობიექტი კლასის User,
3 ობიექტი კლასის Employee,
3 ობიექტი კლასის City, და
თვითნებური თანმიმდევრობით ჩაწერეთ ისინი მასივში
$arr.
გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ
ეკრანზე თვისება name-ის სვეტი იმ
ობიექტებისა, რომლებიც ეკუთვნის კლასს User
ან ამ კლასის შთამომავალს.
გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ
ეკრანზე თვისება name-ის სვეტი იმ
ობიექტებისა, რომლებიც არ ეკუთვნის კლასს User
ან ამ კლასის შთამომავალს.
გადაუარეთ ციკლით მასივს $arr და გამოიტანეთ
ეკრანზე თვისება name-ის სვეტი იმ
ობიექტებისა, რომლებიც ეკუთვნის ზუსტად კლასს
User, ანუ არა კლასს City
და არა კლასს Employee.