PHP OOP मा विरासत

PHP मा परिमार्जकहरू पहुँच गर्नुहोस्
PHP OOP मा स्थिरहरू

उत्तराधिकार भनेको के हो?

जब एक वर्ग अर्को वर्गबाट ​​व्युत्पन्न हुन्छ, यसलाई उत्तराधिकार भनिन्छ। यहाँ PHP मा विरासतसँग सम्बन्धित केही महत्त्वपूर्ण सर्तहरू छन्।

  • अभिभावक वर्ग - जुन वर्गबाट ​​अन्य वर्गहरू व्युत्पन्न हुन्छन् त्यसलाई अभिभावक वर्ग भनिन्छ। यसलाई आधार वर्ग पनि भनिन्छ।
  • बाल वर्ग – अर्को वर्गबाट ​​उत्पन्न हुने कक्षालाई बालवर्ग भनिन्छ। पात वर्ग वा व्युत्पन्न वर्ग जस्ता यसको लागि केहि अन्य नामहरू पनि छन्।
PHP मा विरासत

PHP मा कक्षा कसरी इनहेरिट गर्ने?

एक वर्ग प्रयोग गरेर इनहेरिट गर्न सकिन्छ विस्तार गर्दछ कीवर्ड। निम्न उदाहरण हेर्नुहोस्।

<?php
class Fruit {
    protected $name;
    protected $color;

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

    public function getName() {
        return $this->name;
    }

    public function getColor() {
        return $this->color;
    }
}

class Apple extends Fruit {
    protected $variety;

    public function __construct($name, $color, $variety) {
        parent::__construct($name, $color);
        $this->variety = $variety;
    }

    public function getVariety() {
        return $this->variety;
    }
}

$apple = new Apple('Apple', 'Red', 'Fuji');
echo $apple->getName(); // Output: Apple
echo $apple->getColor(); // Output: Red
echo $apple->getVariety(); // Output: Fuji
?>

यस उदाहरणमा, कक्षा एप्पल विस्तार गर्दछ क्लास फ्रुट, जसको मतलब एप्पल क्लासले यसको आफ्नै बाहेक सबै फल वर्गका विशेषताहरू र विधिहरू समावेश गर्दछ। Apple क्लास कन्स्ट्रक्टरले parent:: construct() प्रकार्यलाई उपयुक्त प्यारामिटरहरू आपूर्ति गर्दै, प्यारेन्ट कन्स्ट्रक्टरलाई कल गर्न प्रयोग गर्दछ। त्यसपछि, इनहेरिटेन्स प्रयोग गरेर, तपाइँ एप्पल क्लासको उदाहरण सिर्जना गर्न सक्नुहुन्छ र अभिभावक वर्गबाट ​​प्रकार्य पहुँच गर्न सक्नुहुन्छ।

माथिको संक्षेप गर्न:

  1. इनहेरिटेन्सले बाल वर्गलाई अभिभावक वर्गको सार्वजनिक __ निर्माण, विधिहरू र गुणहरूमा पहुँच गर्न अनुमति दिन्छ।
  2. माथिको उदाहरणमा, हामी यसको वस्तु प्रयोग गरेर एप्पल क्लासको विधि, साथै अभिभावक वर्गको विधिहरू पहुँच गर्न सक्छौं।

इनहेरिटेन्समा सुरक्षित पहुँच परिमार्जकहरूको दायरा

अघिल्लो ट्युटोरियलमा, हामीले सिक्यौं कि वर्गको संरक्षित विशेषताहरू/विधिहरू कक्षा भित्र पहुँचयोग्य छन् र त्यसबाट व्युत्पन्न वर्गहरू।

इनहेरिटेन्समा सुरक्षित पहुँच परिमार्जकहरूको दायरा बुझ्नको लागि, निम्न उदाहरण हेरौं।

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

माथिको उदाहरण मा:

  • हामी फल नामक वर्ग बनाउँछौं जसमा निश्चित सार्वजनिक विशेषताहरू र सुरक्षित कार्यहरू छन्।
  • हामी अर्को वर्ग बनाउँछौं, स्याउ, जुन फलबाट फैलिएको छ र यसको आफ्नै उदाहरण छ।
  • जब हामीले एप्पल क्लास वस्तु प्रयोग गरेर फल वर्गको संरक्षित विधिमा पहुँच गर्ने प्रयास गर्छौं, यसले त्रुटि दिन्छ किनभने, हामीले व्युत्पन्न वर्ग बाहिर फल वर्गको संरक्षित सदस्य पहुँच गर्ने प्रयास गरिरहेका छौं।

अर्को उदाहरण हेरौं, जुन अनिवार्य रूपमा अन्तिमको सानो परिमार्जित संस्करण हो।

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

किनभने हामी यसलाई अघिल्लो उदाहरणमा कक्षा भित्र पहुँच गर्दैछौं, फल वर्गको संरक्षित विधि एप्पल वर्गमा उपलब्ध छ।

विरासतमा ओभरराइड गर्दै

ओभरराइडिङ भनेको एउटै नामको बाल कक्षाहरूमा अभिभावक वर्गका विधिहरूलाई पुन: परिभाषित गर्नु हो। निम्न विरासत ओभरराइडिङ उदाहरणलाई विचार गर्नुहोस्।

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

माथिको उदाहरण मा:

  • ओभरराइडिङ भनेको बाल कक्षाहरूमा अभिभावक वर्गका विधिहरूको नाम परिवर्तन गर्नु हो। उत्तराधिकारमा ओभरराइडिङको निम्न उदाहरणलाई विचार गर्नुहोस्।
  • यो ध्यान दिन लायक छ कि बच्चा वर्ग स्याउ मा __construct र intro विधिहरू एउटै नाम छ। यद्यपि, मापदण्डहरू फरक हुन सक्छ।
  • हामी एप्पल क्लासको उदाहरण सिर्जना गर्छौं र निर्माण विधिमा तर्कहरू पठाउँछौं।
  • किनभने हामीले एप्पल क्लास कन्स्ट्रक्टर प्रयोग गरेर एप्पल वस्तु उदाहरण उत्पन्न गर्यौं, जब हामीले एपल इन्स्ट्यान्स प्रयोग गरेर इन्ट्रो विधिलाई कल गर्छौं, यसले एप्पल क्लासको परिचय प्रकार्यलाई कल गर्छ।

विरासतमा अन्तिम कुञ्जी शब्दको भूमिका

अन्तिम किवर्डले बच्चा/व्युत्पन्न वर्गलाई अभिभावक/आधार वर्गको प्रकार्यलाई ओभरराइड गर्नबाट रोक्छ। अन्तिम किवर्ड कसरी प्रयोग गरिन्छ भनेर हेर्नको लागि निम्न उदाहरण हेर्नुहोस्।

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

एप्पल वर्गले अघिल्लो उदाहरणमा परिचय विधिलाई ओभरराइड गर्ने प्रयास गर्छ। हामीले फ्रुट क्लासको परिचय प्रकार्यको साथ अन्तिम कुञ्जी शब्द प्रयोग गरेकाले यसले त्रुटि फ्याँक्नेछ।

यदि तपाईं PHP विरासतको बारेमा थप पढ्न चाहनुहुन्छ भने हामी निम्न सिफारिस गर्दछौं आधिकारिक गाइड.

प्रश्नोत्तर

Q: PHP OOP मा, इनहेरिटेन्स भनेको के हो?
A: PHP OOP मा, इनहेरिटेन्स भनेको एउटा प्रणाली हो जसले नयाँ वर्गलाई अघिल्लो कक्षाको विशेषताहरू र विधिहरू इनहेरिट गर्न अनुमति दिन्छ। यसले नयाँ वर्गले अभिभावक वर्गको कोड र कार्यक्षमतालाई पुन: प्रयोग गर्न सक्छ र यसको आफ्नै नयाँ गुणहरू र विधिहरू पनि थप्न सक्छ।

Q: PHP मा, तपाइँ कसरी अर्को वर्गबाट ​​प्राप्त हुने वर्गलाई परिभाषित गर्नुहुन्छ?
A: PHP मा, "विस्तार" कुञ्जी शब्द एक वर्ग परिभाषित गर्न प्रयोग गरिन्छ जुन अर्को वर्गबाट ​​प्राप्त हुन्छ। उदाहरणका लागि, यदि तपाइँसँग "ParentClas" अभिभावक वर्ग छ र तपाइँ त्यसबाट प्राप्त हुने "ChildClas" बाल वर्ग निर्माण गर्न चाहनुहुन्छ भने, तपाइँ निम्न लेख्न सक्नुहुन्छ:

class ChildClass extends ParentClass {
  // properties and methods
}

प्रश्न: PHP मा, एक वर्ग धेरै वर्गहरु बाट इनहेरिट गर्न सक्छ?
A: होइन, PHP मा, एक वर्गले अर्को वर्गबाट ​​मात्र प्राप्त गर्न सक्छ। यद्यपि, इन्टरफेसहरू समान कार्यक्षमता प्रदान गर्न प्रयोग गर्न सकिन्छ, र एक वर्गले धेरै इन्टरफेसहरू लागू गर्न सक्छ।

प्रश्न: के बाल कक्षामा विधिलाई ओभरराइड गर्न सम्भव छ?
A: हो, तपाईंले एउटै नामको विधि सिर्जना गरेर बाल कक्षामा विधिलाई ओभरराइड गर्न सक्नुहुन्छ। बाल वर्ग वस्तुमा आह्वान गर्दा, अभिभावक वर्ग विधिको सट्टा बाल वर्ग विधि प्रयोग गरिनेछ।

प्रश्न: के यो बाल कक्षाबाट अभिभावक वर्ग विधि प्रयोग गर्न सम्भव छ?
A: हो, तपाईले स्कोप रिजोल्युसन अपरेटर (::) र विधिको नामलाई बाल कक्षाबाट अभिभावक वर्ग विधिलाई कल गर्न पछि "अभिभावक" कुञ्जी शब्द प्रयोग गर्न सक्नुहुन्छ। उदाहरणको रूपमा:

class ChildClass extends ParentClass {
  public function childMethod() {
    parent::parentMethod();
  }
}

अभ्यास:

  1. PHP मा प्रयोग गरिएको कुञ्जी शब्द के हो कि एक वर्ग अर्को वर्गबाट ​​इनहेरिट गर्दैछ भनेर संकेत गर्न?
  2. तपाइँ कसरी बाल कक्षामा अभिभावक वर्गबाट ​​विधि वा सम्पत्ति पहुँच गर्न सक्नुहुन्छ?
  3. बाल वर्गको कन्स्ट्रक्टर भित्र अभिभावक वर्गको कन्स्ट्रक्टरलाई तपाइँ कसरी कल गर्न सक्नुहुन्छ?
  4. तपाइँ कसरी एक विधि वा सम्पत्तिलाई बाल कक्षामा ओभरराइड हुनबाट रोक्न सक्नुहुन्छ?
  5. के बीच भिन्नता छ extendsimplements PHP मा कुञ्जी शब्दहरू?

उत्तर:

  1. यो extends कुञ्जी शब्द PHP मा प्रयोग गरिन्छ कि एक वर्ग अर्को वर्गबाट ​​विरासतमा छ भनेर संकेत गर्न।
  2. तपाईं प्रयोग गरेर बाल कक्षामा अभिभावक वर्गबाट ​​विधि वा सम्पत्ति पहुँच गर्न सक्नुहुन्छ parent:: कुञ्जी शब्द, विधि वा गुण नाम पछि।
  3. तपाईं प्रयोग गरेर बाल वर्गको कन्स्ट्रक्टर भित्र अभिभावक वर्गको कन्स्ट्रक्टरलाई कल गर्न सक्नुहुन्छ parent::__construct() विधि।
  4. तपाईंले बाल कक्षामा प्रयोग गरेर विधि वा गुणलाई ओभरराइड हुनबाट रोक्न सक्नुहुन्छ final अभिभावक वर्गमा विधि वा सम्पत्ति घोषणा अघि किवर्ड।
  5. यो extends कुञ्जी शब्द प्रयोग गरिन्छ कि एक वर्ग अर्को वर्गबाट ​​विरासतमा छ भनेर संकेत गर्न, जबकि implements क्लासले इन्टरफेस कार्यान्वयन गरिरहेको छ भनी संकेत गर्न कीवर्ड प्रयोग गरिन्छ।
PHP मा परिमार्जकहरू पहुँच गर्नुहोस्
PHP OOP मा स्थिरहरू
नजिक

PHP को बारेमा अप-टु-डेट रहनुहोस्!

हामी स्प्याम गर्दैनौं!

en English
X
माथि स्क्रोल गर्नुहोस्